我遇到的问题是add_custom_command总是过时,因此会在每次构建时运行。 custom命令运行一个工具,该工具是同一项目的目标,以生成另一个目标使用的文件:
add_executable(GeneratorTool main.cpp)
add_custom_command(
OUTPUT generated.h
COMMAND GeneratorTool
DEPENDS main.cpp
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "** GeneratorTool **"
)
add_library(MyLib STATIC generated.h ...)
在构建输出(visual studio 2010)中,我总是看到** GeneratorTool **。我希望一旦generate.h存在并且比main.cpp更新,它就不会再次构建。 有什么想法吗?
谢谢, 约亨
答案 0 :(得分:2)
首先,您可以在DEPENDS
而不是add_custom_command
上将main.cpp
放在GeneratorTool上。 GeneratorTool
已取决于main.cpp
。
然后很可能是generated.h
的位置不明确,它会强制重建generated.h。
确保MyLib在正确的位置查找generated.h
。
我的盲目猜测是尝试:
add_library(MyLib STATIC ${CMAKE_CURRENT_SOURCE_DIR}/generated.h ...)
答案 1 :(得分:1)
它可能是另一件事 - 确保命令生成所有 OUTPUT
文件。如果您的生成器甚至无法生成其中一个,它将每次运行(这是我的问题)。