cmake - 如何构建取决于目标 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+)
解决方案
您可以尝试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
推荐阅读
- slurm - 使用 SLURM 在同一节点中执行多个任务
- c# - 更新列表中的索引
- testing - 使用赛普拉斯,如何测试不存在的元素?
- json - postgres & jsonb,列表提取(到表)
- python - 自定义 Django 用户模型是否可能只有一个字段?
- python-3.x - urllib.request.urlopen() 不适用于此特定网站
- c++ - 读取输入后输出丢失一个字符
- html - Angular 2+:在具有多个子组件的父级中,列出所有 grandchild1,然后是 grandchild2
- python-3.x - 了解 Python 在类与变量中的内存使用情况
- spring-boot - 带有 SpringSecurity 5 的 SpringBoot 2 抛出 NoClassDefFoundError