cmake将自定义命令绑定到现有的顶级目标失败

时间:2016-05-23 09:23:20

标签: cmake add-custom-command

我想拥有一个顶级自定义目标,以及能够通过向其添加/绑定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 的任何提及,这对我来说很奇怪。

期待你的帮助。

1 个答案:

答案 0 :(得分:0)

这通常通过构建目标之间的依赖关系来解决。对于其中一个子目录中的每个命令,您首先要添加本地'命令/目标,然后使其成为顶级的依赖项。从而迫使cmake执行所有本地'目标在执行顶级目标之前。