gpt4 book ai didi

java - 如何将 cmake 配置为仅重建 java 项目中已更改的 .java 文件?

转载 作者:搜寻专家 更新时间:2023-10-31 20:06:39 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com