GNU make有--debug选项,但它似乎并没有那么有用,还有其他选项吗? CMake在生成的Makefile中提供了额外的调试标志吗?
在运行 make 命令时,添加 VERBOSE=1
可以查看完整的命令输出。例如:
cmake .
make VERBOSE=1
你也可以在cmake命令中添加-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
,以便从生成的Makefile中永久输出详细的命令信息。
cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make
为了减少可能不太重要的输出,你可以使用以下选项。选项CMAKE_RULE_MESSAGES=OFF
可以去掉类似[33%] Building C object...的行,而--no-print-directory
告诉make不要打印出当前目录,从而过滤掉像make [1]: Entering directory
和make [1]: Leaving directory
这样的行。
cmake -DCMAKE_RULE_MESSAGES:BOOL=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make --no-print-directory
cmake --build . -- VERBOSE=1
意思:使用CMake构建当前目录,并输出详细构建信息。 - letmaik-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
,这样我们就可以将所有命令记录在compile_commands.json
文件中,而不必实际构建源代码。 - fgiraldeau在 CMakeLists.txt
文件中设置选项是很方便的:
set(CMAKE_VERBOSE_MAKEFILE ON)
CMAKE_VERBOSE_MAKEFILE
应该默认关闭,成为用户根据需要用于调试的选择。 - Ela782或者只需在shell上导出VERBOSE环境变量,像这样:
export VERBOSE=1
VERBOSE
设置为1
对于MSVC和MinGW都有效。如果您想撤消此操作,则需要将其设置为空,而不是0
。 - kbridge4096cmake --build . --verbose
在 Linux 上并且使用 Makefile 生成的情况下,这可能只是在后台调用 make VERBOSE=1
命令,但是 cmake --build
可以更加方便地适用于您的构建系统,例如,在不同的操作系统上或者如果您之后决定进行 Ninja 构建时:
mkdir build
cd build
cmake ..
cmake --build . --verbose
它的文档还建议它与VERBOSE=1
等效:
--verbose, -v
启用详细输出(如果支持),包括要执行的构建命令。
如果设置了VERBOSE环境变量或CMAKE_VERBOSE_MAKEFILE缓存变量,则可以省略此选项。
在Cmake 3.22.1,Ubuntu 22.04上进行测试。
我曾试图使用类似的方法确保-ggdb
标志存在。
在一个干净的目录中调用make命令并grep您要查找的标志。如果我要查找debug
而不是ggdb
,我只需编写以下内容:
make VERBOSE=1 | grep debug
-ggdb
标志足够模糊,只有编译命令才会出现。
CMake现在支持--verbose
参数,可以指定详细的构建输出信息。无论使用哪种生成器,该功能都可以正常工作。
cd project
cmake -B build/
cmake --build build --verbose
值得注意的是,Xcode可能无法与--verbose一起使用。
Some generators such as Xcode don't support this option currently.
VERBOSE
环境变量。New in version 3.14.
Activates verbose output from CMake and your build tools of choice when you start to actually build your project.
Note that any given value is ignored. It's just checked for existence.
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE
会生成一个文件包含所有编译命令。
一些 LSP 需要这个文件来知道如何直接编译源文件,但它也可以帮助调试编译问题。
输出文件名为 ${CMAKE_BINARY_DIR}/compile_commands.json
。
mkdir build; cd build; cmake .. --debug-output; make VERBOSE=1
- parasrish