我使用 python 脚本 (gen_instantiations.py) 生成一个包含在另一个 cpp 文件 (foo.cpp) 中的 cpp 文件 (autogen_instantiations.cpp) 所以我希望 CMake 在 foo.hpp 或 gen_instantiations.py 发生变化时重新生成这个文件。 按照 CMake FAQ 中的说明,这是我所做的
add_custom_command(
COMMAND "./gen_instantiations.py"
OUTPUT "autogen_instantiations.cpp"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
DEPENDS gen_instantiations.py foo.hpp
)
add_custom_target(instantiations ALL DEPENDS autogen_instantiations.cpp)
add_library(foo
foo.cpp
)
add_dependencies(foo instantiations)
但是每次运行都会运行脚本。我做错了什么?
最佳答案
更好的方法是不要#include
生成autogen_instantiations.cpp
,而是将它作为一个源文件添加到foo
库中,所以 cmake 可以看到 foo
依赖于它并在 smth 发生变化时调用你的生成器
set(GENERATED_SOURCES autogen_instantiations.cpp)
add_custom_command(
OUTPUT ${GENERATED_SOURCES}
COMMAND "./gen_instantiations.py"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/gen_instantiations.py ${CMAKE_CURRENT_SOURCE_DIR}/foo.hpp
)
add_library(
foo
foo.cpp
${GENERATED_SOURCES}
)
关于c++ - 自定义目标的 cmake 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925519/