cmake:目标依赖性问题(add_dependency 不工作?)
cmake: issue with target dependencies (add_dependency not working?)
我有一个小型库,用于收集每个构建的 SCM 信息。它有 2 个目标:
generate_scmversion_inc
一个自定义目标 运行 在每次构建时使用一个脚本,它会生成一个包含 SCM 信息(标签、日期、时间等)的 scmversion.inc 文件
scmversion
编译 SCMVersion.cpp。此 cpp 文件包含 scmversion.inc。
在我想要的每个构建中,顺序为:
- 运行
的脚本
- SCMVersion.cpp重建
为了实现这个目标,我声明 scmversion
依赖于 generate_scmversion_inc
:
add_dependencies(scmversion generate_scmversion_inc)
结果:
generate_scmversion_inc
运行s 每次构建都符合预期。但是 scmversion
奇怪的是 每隔一秒 。有人可以告诉我我做错了什么吗?
我正在使用 CMake 3.4.3 和构建系统 ninja 1.6.0
参考代码:
project(scmversion)
set (SOURCES
src/ndd/SCMVersion.cpp)
add_library(${PROJECT_NAME} ${SOURCES})
add_custom_target(generate_scmversion_inc ALL
COMMAND ${CMAKE_COMMAND}
-DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/script/getscm.cmake)
add_dependencies(scmversion generate_scmversion)
我让它按预期工作了:
- 使用始终构建的自定义目标
alwaysbuild
。
- 用
BYPRODUCTS
选项定义一个 add_custom_command
,每个构建都是 运行。
- 添加
alwaysbuild
作为对项目本身的依赖。
在代码中:
add_custom_target(alwaysbuild ALL)
add_custom_command(TARGET alwaysbuild
BYPRODUCTS ${PROJECT_BINARY_DIR}/scmversion.inc
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/script/getscm.cmake)
add_dependencies(${PROJECT_NAME} alwaysbuild)
我有一个小型库,用于收集每个构建的 SCM 信息。它有 2 个目标:
generate_scmversion_inc
一个自定义目标 运行 在每次构建时使用一个脚本,它会生成一个包含 SCM 信息(标签、日期、时间等)的 scmversion.inc 文件scmversion
编译 SCMVersion.cpp。此 cpp 文件包含 scmversion.inc。
在我想要的每个构建中,顺序为:
- 运行 的脚本
- SCMVersion.cpp重建
为了实现这个目标,我声明 scmversion
依赖于 generate_scmversion_inc
:
add_dependencies(scmversion generate_scmversion_inc)
结果:
generate_scmversion_inc
运行s 每次构建都符合预期。但是 scmversion
奇怪的是 每隔一秒 。有人可以告诉我我做错了什么吗?
我正在使用 CMake 3.4.3 和构建系统 ninja 1.6.0
参考代码:
project(scmversion)
set (SOURCES
src/ndd/SCMVersion.cpp)
add_library(${PROJECT_NAME} ${SOURCES})
add_custom_target(generate_scmversion_inc ALL
COMMAND ${CMAKE_COMMAND}
-DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/script/getscm.cmake)
add_dependencies(scmversion generate_scmversion)
我让它按预期工作了:
- 使用始终构建的自定义目标
alwaysbuild
。 - 用
BYPRODUCTS
选项定义一个add_custom_command
,每个构建都是 运行。 - 添加
alwaysbuild
作为对项目本身的依赖。
在代码中:
add_custom_target(alwaysbuild ALL)
add_custom_command(TARGET alwaysbuild
BYPRODUCTS ${PROJECT_BINARY_DIR}/scmversion.inc
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/script/getscm.cmake)
add_dependencies(${PROJECT_NAME} alwaysbuild)