cmake:目标依赖性问题(add_dependency 不工作?)

cmake: issue with target dependencies (add_dependency not working?)

我有一个小型库,用于收集每个构建的 SCM 信息。它有 2 个目标:

  1. generate_scmversion_inc 一个自定义目标 运行 在每次构建时使用一个脚本,它会生成一个包含 SCM 信息(标签、日期、时间等)的 scmversion.inc 文件
  2. scmversion 编译 SCMVersion.cpp。此 cpp 文件包含 scmversion.inc。

在我想要的每个构建中,顺序为:

为了实现这个目标,我声明 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)

我让它按预期工作了:

  1. 使用始终构建的自定义目标 alwaysbuild
  2. BYPRODUCTS 选项定义一个 add_custom_command,每个构建都是 运行。
  3. 添加 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)