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

Hol*_*ger 18 cmake

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

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

cmake . && cmake --build . --target $target
Run Code Online (Sandbox Code Playgroud)

对于既不使用grep也不使用python,也不使用perl也不使用...的解决方案的奖励积分很多 - 你明白了.

Flo*_*ian 22

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

cmake.exe --build . --target help
Run Code Online (Sandbox Code Playgroud)

还有图形输出解决方案(这里有例子):

cmake.exe . --graphviz=test.graph 
dotty test.graph
Run Code Online (Sandbox Code Playgroud)

另请参见使用CMakeCMake Graphviz输出清除器生成依赖关系图.

如果您尚未dotty安装,则仍可以通过在以下位置启用GLOBAL_DEPENDS_DEBUG_MODE来显示目标依赖项CMakeLists.txt:

set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1)
Run Code Online (Sandbox Code Playgroud)

这里的不利之处在于你无法从命令行触发它.它将始终显示在stderr生成make环境时.

参考

  • 注意``cmake --build.--target help``与``make help``基本相同 (8认同)
  • @Ignitor是的,这是一个抽象,所以你不需要知道`make`调用语法或[make program's path](https://cmake.org/cmake/help/latest/variable/CMAKE_MAKE_PROGRAM.html).我在这里使用它因为它也适用于其他"makefile生成器",如`nmake`,`gmake`,`ninja`,... (3认同)

Oli*_*ork 9

我想你可能正在寻找这个命令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
Run Code Online (Sandbox Code Playgroud)

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