我如何知道哪些选项从 CMake 传递给 GCC?
Posted
技术标签:
【中文标题】我如何知道哪些选项从 CMake 传递给 GCC?【英文标题】:How do I know what options are being passed to GCC from CMake? 【发布时间】:2016-07-04 17:31:13 【问题描述】:我正在尝试构建一个在其构建系统中使用 CMake 的大型开源项目 (Clang)。我在 Windows 上使用 MinGW64。
构建命令是:
cmake --build . --config Debug --target clang
我在构建时遇到问题,因此我想诊断正在发送到 GCC 的命令。例如,我想知道是否设置了-g
。
如何查看 CMake 构建触发的 GCC 命令列表?
【问题讨论】:
打开makefile看看就好了。 @IvanRubinson 在我的系统上为 LLVM+clang3.8 生成的 makefile CMake 有超过 9400 行。所以玩得开心。 XD 【参考方案1】:VERBOSE=1 make | more
示例:
[ 14%] Building CXX object public_api/CMakeFiles/secr_api_tests.dir/tests/exception_test.cpp.o
cd /Users/rhodges/secr/netbeans-secr/public_api && /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -I/Users/rhodges/secr/secr/public_api/src -I/Users/rhodges/secr/netbeans-secr/public_api/src -I/Users/rhodges/secr/secr/public_api/tests -I/Users/rhodges/secr/netbeans-secr/public_api/tests -isystem /Users/rhodges/secr/secr/public_api/include -isystem /Users/rhodges/secr/netbeans-secr/public_api/include -isystem /Users/rhodges/secr/netbeans-secr/target_local/include -isystem /Users/rhodges/secr/secr/valuelib/debug/include -isystem /Users/rhodges/secr/netbeans-secr/valuelib/debug/include -isystem /Users/rhodges/secr/secr/valuelib/data/include -isystem /Users/rhodges/secr/netbeans-secr/valuelib/data/include -isystem /Users/rhodges/secr/secr/valuelib/tuple/include -isystem /Users/rhodges/secr/netbeans-secr/valuelib/tuple/include -isystem /Users/rhodges/secr/secr/valuelib/immutable/include -isystem /Users/rhodges/secr/netbeans-secr/valuelib/immutable/include -isystem /Users/rhodges/secr/secr/valuelib/stdext/include -isystem /Users/rhodges/secr/netbeans-secr/valuelib/stdext/include -std=gnu++14 -o CMakeFiles/secr_api_tests.dir/tests/exception_test.cpp.o -c /Users/rhodges/secr/secr/public_api/tests/exception_test.cpp
...
【讨论】:
不完全是性别歧视。我会说命令主义!反对VERBOSE=1 make | less
?不要歧视它。 :-)
@skypjack 键入 more
是 30 年的习惯 :) 当 vi
被认为是最先进的时,我使用的是 unix...
现在不了吗?我还在努力戒掉它,而且我从来没有更新过外面的世界!! :-)【参考方案2】:
正如 Richard Hodges 所说,VERBOSE=1 make
是主要的便捷方式。
另一种方法是将-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
添加到您的CMake 调用中,这将生成一个文件compile_commands.json
,其中包含每个文件的编译标志的机器可读数据库。
【讨论】:
以上是关于我如何知道哪些选项从 CMake 传递给 GCC?的主要内容,如果未能解决你的问题,请参考以下文章