我想拥有一个顶级自定义目标,以及能够通过向其添加/绑定custom_command来扩展此已存在目标的嵌套子模块。现在我遇到了一个问题:如果add_custom_command(TARGET target_name ...)
不在定义目标的文件中使用(目标在顶级CMakeLists.txt上定义),则只需忽略此custom_command。
详细信息:
1)在顶级 CMakelists.txt上创建的custom_target
cmake_minimum_required(VERSION 2.8)
add_custom_target(custom_tg
COMMAND ls > custom_target.txt
)
add_custom_command(TARGET custom_tg
COMMAND ls > custom_command1.txt
)
add_subdirectory(sub)
2)在子目录" sub"还有其他 CMakeLists.txt (模块),我希望能够使用自定义命令扩展现有目标。
add_custom_command(TARGET custom_tg
COMMAND ls > custom_command2.txt
)
3)当我创建构建目录并运行
时cmake .. && make custom_tg
输出文件是 custom_target.txt 和 custom_command1.txt ,但是没有 custom_command2.txt ,那就是&#39>实际上我的问题是。
如果我查看 build / CMakeFiles / custom_tg.dir / build.make ,我在那里看不到 custom_command2.txt 。以下是 build.make 文件的内容:http://pastebin.com/zVVS4sYL。
实际上我在Cmake生成的文件树中找不到关于 custom_command2.txt 的任何提及,这对我来说很奇怪。
期待你的帮助。
答案 0 :(得分:0)
这通常通过构建目标之间的依赖关系来解决。对于其中一个子目录中的每个命令,您首先要添加本地'命令/目标,然后使其成为顶级的依赖项。从而迫使cmake执行所有本地'目标在执行顶级目标之前。