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

标签 c++ cmake

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

相关文章:

visual-studio - 带有使用多个值的生成器表达式的 CMake set_property 命令

c++ - cmake 找不到 boost linux

c++ - CMake 在 Linux 中编译失败

c++ - CMake 没有创建可以访问我的共享库的可执行文件

c++ - 在没有特定容器时检查迭代器是否未分配给项目

c++ - C++中的内存分配

c++ - 从通用 lambda 检测参数类型 - GCC 编译错误

android - 在 Android Studio/Gradle 中编译 bundle 库的问题

c++ - 访问一个 vector ,它是映射中的一个值,以与另一个 vector 在其上运行相等运算符

c++ - 使用 ofstream 写入文本文件时断言失败