作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 cmake 项目,如下所示:
project(myProject JAVA)
add_library(myLibrary foo.java bar.java)
但是当我在目录中运行 make 时,所有的 java 文件都被重建,即使它们没有改变。有没有办法关闭该行为?
谢谢,
最佳答案
add_library
CMake 中的 Java 支持不是太热。它忽略“package”指令,并假设“foo.java”在基本目录中创建“foo.class”,而不是在子目录中 com/example/
对于 package com.example;
.
如果您查看 CMakeFiles/<jar_file>.dir/build.make
中生成的 makefile ,它有这样的代码(清理了一下)
CMakeFiles/test.dir/foo.class: ../foo.java
javac $(Java_FLAGS) /full/path/to/foo.java -d CMakeFiles/test.dir
当 foo.java 包含“package com.example;”时,这是一个损坏的依赖关系在顶部。 Make 期望 foo.class 被创建,当它没有创建时你再次运行 make,它会编译 foo.java 看看这次它是否可以工作。实际生成的文件在 com/example 中(幸运的是它被添加到最终的 jar 文件中)。
好消息是最近情况有所改善。在 CMake 的 2.8.6 版本中,添加了一个名为 UseJava
的新模块。这在编译 Java 文件和在发生更改时正确重建方面做得更好。而不是使用 add_library
你需要使用 add_jar
.这是一个完整的示例 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 2.8.6)
find_package(Java)
include(UseJava)
project(java_test Java)
set(SRC
src/com/example/test/Hello.java
src/com/example/test/Message.java
)
add_jar(hello ${SRC})
这将从输入源文件生成 hello.jar。
关于java - 如何将 cmake 配置为仅重建 java 项目中已更改的 .java 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4782345/
我是一名优秀的程序员,十分优秀!