如何让CMake生成的Makefile回显完整编译器命令行
CMake构建时打印完整编译命令行的方法
make V=1未生效的核心原因是:CMake生成的Unix Makefile并不识别缩写的V=1参数,这是手写Makefile、内核构建体系等场景的惯例参数,和CMake的规则不匹配。
你可以根据自身需求,选择以下任意一种方式开启完整编译命令输出:
1. 全局永久生效(配置阶段设置)
在执行CMake配置项目时传入参数,后续所有构建操作都会默认打印完整命令行,无需每次构建额外加参数:
# 首次配置项目时使用 mkdir build && cd build cmake -DCMAKE_VERBOSE_MAKEFILE=ON ../myproject make
如果已经完成过项目配置,不需要删除build目录,直接在build目录下执行以下命令更新配置即可:
cmake -DCMAKE_VERBOSE_MAKEFILE=ON .
2. 单次构建临时生效(构建阶段设置)
如果只需要单次构建时查看命令,不需要修改全局配置,可以根据使用的构建工具选择对应命令:
- 针对Unix Makefile生成器(常规默认构建流程),执行:
make VERBOSE=1 - 针对Ninja生成器(若环境安装了ninja,部分发行版的CMake会优先选择该生成器),执行:
ninja -v # 或者写全参数 ninja --verbose - 跨生成器通用写法,不需要记忆不同构建工具的参数差异,无论底层是Make还是Ninja都可以正常生效:
# 在build目录下执行 cmake --build . --verbose
以上任意一种方式生效后,构建过程中会完整打印每个目标文件编译时传给C++编译器的所有参数、链接阶段的完整链接命令,不会出现参数省略的情况。
内容的提问来源于stack exchange,提问作者Andrew Tomazos
相关产品推荐
相关产品推荐

