我正在尝试用CMake创建一个JNI jar。为此,必须按照适当的顺序进行以下操作:
,其中
add_jar()
(我更喜欢使用custom_command)add_custom_command(TARGET ...)
add_library()
add_custom_command(TARGET ...)
完成(因为add_jar不支持-C选项)如何确保遵循正确的订单?我有时会在第一次运行时遇到错误。
add_custom_command
有POST
/ PRE
构建选项,但add_jar
和add_library
没有。没有参数add_custom_command
的{{1}}有TARGET
选项,我应该使用它吗?
有没有办法让DEPENDS
等待2.自定义命令运行?
答案 0 :(得分:8)
我想错误的是你在使用第一次运行CMake时尚不存在的源文件调用add_library
?
如果是这样,您可以使用GENERATED
命令在这些源文件上设置set_source_files_properties
属性。这让CMake知道这些文件在配置时不存在(当CMake运行时),但它们将在构建时存在。
要确保add_jar
命令在add_library
之前执行,请使用add_dependencies
在add_jar
目标上创建依赖关系。要确保add_custom_command
命令在add_library
之前执行,请使用自定义命令使用TARGET ... PRE_BUILD
选项。
例如,如果lib的源列表保存在名为${Srcs}
的变量中,则可以执行以下操作:
# Allow 'Srcs' to not exist at configure-time
set_source_files_properties(${Srcs} PROPERTIES GENERATED TRUE)
add_library(MyLib ${Srcs})
# compile .class files
add_jar(MyJarTarget ...)
# generate .h headers
add_custom_command(TARGET MyLib PRE_BUILD COMMAND ...)
# Force 'add_jar' to be built before 'MyLib'
add_dependencies(MyLib MyJarTarget)