4

我正在尝试使用 CMake 创建一个 JNI jar。为此,必须按适当的顺序执行以下操作:

  1. 编译 .class 文件
  2. 生成 .h 标头
  3. 构建原生库
  4. 罐子里的一切

在哪里

  1. 完成add_jar()(我更喜欢在custom_command)
  2. 完成了add_custom_command(TARGET ...)
  3. 完成了add_library()
  4. 已完成add_custom_command(TARGET ...)(因为 add_jar 不支持 -C 选项)

如何确保遵循正确的顺序?我有时在第一次运行时会出错。

add_custom_commandPOST/ PREbuild 选项,但add_jaradd_library没有。add_custom_command没有参数的那个TARGETDEPENDS选项,我应该用那个吗?

有没有办法告诉add_library等待 2. custom 命令运行?

4

1 回答 1

8

我猜这个错误是你调用add_library的源文件在 CMake 的第一次运行期间还不存在?

如果是这样,您可以使用该命令设置GENERATED这些源文件的属性。set_source_files_properties这让 CMake 知道这些文件在配置时(CMake 运行时)不存在是可以的,但它们将在构建时存在。

要确保该add_jar命令之前执行add_library,请add_jar使用add_dependencies. 为确保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)
于 2013-03-21T01:27:38.357 回答