如何从命令行列出已定义的make目标?

时间:2015-06-12 01:03:01

标签: cmake

我觉得这个问题几乎是愚蠢的,但我找不到任何关于这个...

假设我有一个包含许多目标的cmake项目:库,可执行文件,外部目标,....如何使用cmake命令行界面列出它们。我想要一个有效的列表,将$target替换为以下命令行。

cmake . && cmake --build . --target $target

很多的解决方案,既不使用grep也不使用,也不使用python,也不使用perl也不会... - 你明白了。

3 个答案:

答案 0 :(得分:20)

对于Makefile生成器构建环境,您可以使用

cmake.exe --build . --target help

还有图形输出解决方案(示例找到here):

cmake.exe . --graphviz=test.graph 
dotty test.graph

另请参阅Generating Dependency Graphs with CMakeCMake Graphviz Output Cleaner

如果您没有安装dotty,您仍然可以通过在CMakeLists.txt中启用GLOBAL_DEPENDS_DEBUG_MODE来显示目标依赖项:

set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1)

这里的不足之处是你不能从命令行触发它。在生成make环境时,它将始终显示在stderr上。

<强>参考

答案 1 :(得分:7)

我认为您可能正在寻找命令make help

当我运行make help时(在运行cmake ..之后),我得到以下输出:

The following are some of the valid targets for this Makefile:
... all (the default if no target is provided)
... clean
... depend
etc

您还可以阅读cmake为您自动生成的Makefile

答案 2 :(得分:0)

我们可以获取生成的Makefile的所有目标,就像@Florian和@Olivia Stork回答的那样。

但是,人们可能只是在CMakeLists.txt中寻找明确声明的目标。诸如“全部”和“清洁”之类的目标可能不是人们感兴趣的。

因此,他们可以简单地在make的输出中查询“ Built target”。

cd ~/work/my_project
mkdir build && cd build && cmake ..
make -j4 > log.txt 2>&1
grep 'Built target' log.txt | awk '{print $4}'