簡體   English   中英

如何將cmake配置為僅重建Java項目中更改的.java文件?

[英]How do you configure cmake to only rebuild changed .java files in a java project?

我有一個cmake項目,看起來像:

project(myProject JAVA)
add_library(myLibrary foo.java bar.java)

但是當我在目錄中運行make時,所有的Java文件都會被重建,即使它們沒有被更改。 有沒有辦法關閉這種行為?

謝謝,

CMake中的add_library 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將如何知道如何編譯依賴它的另一個類。 如果您在一個類中刪除了其他類所依賴的方法,那么跳過重新編譯其他類將給您帶來運行時錯誤,而不是編譯器錯誤,那會發生什么。

但是,40個Java文件很小,似乎它們應該在幾秒鍾或更短的時間內編譯完。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM