首页 > 解决方案 > 如何构建取决于目标 A 的执行和输出的目标 B

问题描述

给定一个 CMake 目标 A 和目标 B,其中 B 依赖于 A,而 A 是属于 B 的代码的预处理器。我试图获得以下行为:

A 被构建、执行,其标准输出用于写出定义 C 预处理器指令/宏,需要通过 target_compile_definitions(...) 转发到 B 的构建描述

我尝试添加一个中间自定义目标 pre-B,它调用 A 的程序并存储其输出。

add_custom_target(
    pre-B
    COMMAND A OUTPUT_VARIABLE DEFS
)
# pre-B executable outputs C preprocessor definitions into DEFS

target_compile_definitions(B PRIVATE  ${DEFS})

add_dependencies(B pre-B)

我认为问题在于,当我使用 ${DEFS} 作为参数调用 target_compile_definitions 时,在评估时它是空的,这导致了我的问题。

当目标 B 从执行目标 A 的输出到达时,如何定义目标 B 的编译定义?(CMake 3.0+)

标签: cmake

解决方案


您可以尝试execute_process()改用。

execute_process(
  COMMAND A
  OUTPUT_VARIABLE DEFS
)

当 CMake 在生成系统之前处理项目时,这两个命令都会运行。使用 add_custom_target() 和 add_custom_command() 创建在构建时运行的自定义命令。

src:https ://cmake.org/cmake/help/latest/command/execute_process.html


推荐阅读