gpt4 book ai didi

c++ - 自定义目标的 cmake 依赖项

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:15 25 4
gpt4 key购买 nike

我使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com