0

我想要一个顶级自定义目标和嵌套子模块,它们能够通过添加/绑定 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.txtcustom_command1.txt,但是没有custom_command2.txt,这实际上是我的问题。

如果我查看build/CMakeFiles/custom_tg.dir/build.make我没有看到那里提到custom_command2.txt。这是build.make文件的内容:http: //pastebin.com/zVVS4sYL

实际上我在 Cmake 生成的文件树中找不到关于custom_command2.txt的任何提及,这对我来说看起来很奇怪。

期待您的帮助。

4

1 回答 1

0

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

于 2016-05-23T09:32:01.150 回答