CMake:如何在其他所有事情之前运行add_custom_command

Ale*_*lex 26 cmake

我有一个自定义命令

add_custom_command(
    OUTPUT config.h
    PRE_BUILD
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mk_config_h.py ${CMAKE_CURRENT_BINARY_DIR}/config.h
)
Run Code Online (Sandbox Code Playgroud)

我试图在其他所有内容之前运行它,然后生成unix Makefile.

但是,只有VS2010支持PRE_BUILD,这意味着config.h在链接之前构建它.

如何在cmake开始编译源之前创建自定义命令.

Sim*_*mon 38

你应该使用add_custom_target而不是add_dependencies让你的正常目标取决于它:

add_custom_target(
    myCustomTarget
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mk_config_h.py ${CMAKE_CURRENT_BINARY_DIR}/config.h
)
add_dependencies(myTarget myCustomTarget)
Run Code Online (Sandbox Code Playgroud)

这应该确保在编译源之前运行命令myTarget.

  • 我发现如果自定义目标需要很长时间才能完成,那么并行构建会失败。稍后的构建阶段将按正确的顺序运行,但将使用未完全写入的输出文件。我还没有弄清楚如何强制运行完成。 (3认同)
  • @Anonymous - 不,它不是更好。它有一个明显的缺点,它总是按照文档中的描述运行(目标没有输出文件,并且*总是被认为是过时的*,即使命令尝试创建具有目标名称的文件),即使依赖没有改变。 (2认同)