如何从命令行列出定义的 make 目标?
How do I list the defined make targets from the command line?
我觉得问这个问题有点傻,但我找不到任何关于这个的东西...
假设我有一个包含许多目标(库、可执行文件、外部目标等)的 cmake
项目。如何使用 cmake
命令行界面列出它们?
我想要一个有效的列表来替代以下命令行中的 $target
:
cmake . && cmake --build . --target $target
对于既不使用 grep
也不使用 find
也不使用 python
也不使用 perl
的解决方案有很多 的奖励积分。 .. 你明白了。
对于 Makefile 生成器构建环境,您可以使用
cmake --build . --target help
还有图形输出解决方案(找到 here 的示例):
cmake --graphviz=test.graph
dotty test.graph
另见 Generating Dependency Graphs with CMake and CMake Graphviz Output Cleaner。
如果您没有安装 dotty
,您仍然可以通过在 CMakeLists.txt
:
中启用 GLOBAL_DEPENDS_DEBUG_MODE 来使目标依赖项可见
set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1)
这里的缺点是不能从命令行触发。在生成 make 环境时,它将始终显示在 stderr
上。
参考资料
- How can I get the list of dependencies of cmake target?
- Internet Archive: "CMake: list of targets"
我想您可能正在寻找命令 make help
。
当我 运行 make help
(在 运行ning 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
。
正如@Florian 和@Olivia Stork 所回答的那样,我们可以获得生成的 Makefile 的所有目标。
然而,人们可能只是在 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 }'
@Florian 的回答是正确的。只是为了给它一些上下文,命令
cmake --build . --target help
假设您的构建目录位于当前目录,如“点”所示。
如果您将构建目录设置为当前目录以外的另一个目录,比如说 /build
,那么您应该将其指定为
cmake --build build --target help
.
或者,您也可以
cd build
make help
我觉得问这个问题有点傻,但我找不到任何关于这个的东西...
假设我有一个包含许多目标(库、可执行文件、外部目标等)的 cmake
项目。如何使用 cmake
命令行界面列出它们?
我想要一个有效的列表来替代以下命令行中的 $target
:
cmake . && cmake --build . --target $target
对于既不使用 grep
也不使用 find
也不使用 python
也不使用 perl
的解决方案有很多 的奖励积分。 .. 你明白了。
对于 Makefile 生成器构建环境,您可以使用
cmake --build . --target help
还有图形输出解决方案(找到 here 的示例):
cmake --graphviz=test.graph
dotty test.graph
另见 Generating Dependency Graphs with CMake and CMake Graphviz Output Cleaner。
如果您没有安装 dotty
,您仍然可以通过在 CMakeLists.txt
:
set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_DEBUG_MODE 1)
这里的缺点是不能从命令行触发。在生成 make 环境时,它将始终显示在 stderr
上。
参考资料
- How can I get the list of dependencies of cmake target?
- Internet Archive: "CMake: list of targets"
我想您可能正在寻找命令 make help
。
当我 运行 make help
(在 运行ning 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
。
正如@Florian 和@Olivia Stork 所回答的那样,我们可以获得生成的 Makefile 的所有目标。
然而,人们可能只是在 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 }'
@Florian 的回答是正确的。只是为了给它一些上下文,命令
cmake --build . --target help
假设您的构建目录位于当前目录,如“点”所示。
如果您将构建目录设置为当前目录以外的另一个目录,比如说 /build
,那么您应该将其指定为
cmake --build build --target help
.
或者,您也可以
cd build
make help