我觉得这个问题几乎是愚蠢的,但我找不到任何关于这个...
假设我有一个包含许多目标的cmake项目:库,可执行文件,外部目标,....如何使用cmake命令行界面列出它们。我想要一个有效的列表,将$target
替换为以下命令行。
cmake . && cmake --build . --target $target
很多的解决方案,既不使用grep也不使用,也不使用python,也不使用perl也不会... - 你明白了。
答案 0 :(得分:20)
对于Makefile生成器构建环境,您可以使用
cmake.exe --build . --target help
还有图形输出解决方案(示例找到here):
cmake.exe . --graphviz=test.graph
dotty test.graph
另请参阅Generating Dependency Graphs with CMake和CMake 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}'