我有一个cmake项目,看起来像:
project(myProject JAVA)
add_library(myLibrary foo.java bar.java)
Run Code Online (Sandbox Code Playgroud)
但是当我在目录中运行make时,即使它们没有被更改,也会重建所有java文件.有没有办法关闭这种行为?
谢谢,
add_libraryCMake中的Java支持不是太热.它忽略了"package"指令,并假设"foo.java"在基目录中创建"foo.class",而不是在子目录com/example/中创建package com.example;.
如果你看看生成的makefile CMakeFiles/<jar_file>.dir/build.make,它有这样的代码(清理了一下)
CMakeFiles/test.dir/foo.class: ../foo.java
javac $(Java_FLAGS) /full/path/to/foo.java -d CMakeFiles/test.dir
Run Code Online (Sandbox Code Playgroud)
当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})
Run Code Online (Sandbox Code Playgroud)
这将从输入源文件生成hello.jar.
| 归档时间: |
|
| 查看次数: |
2650 次 |
| 最近记录: |