如何移除cmake --build编译输出中的note级别提示信息
解决CMake构建时编译器输出冗余note提示的方法
你遇到的note级别提示并不是CMake本身输出的,而是你使用的C++编译器(GCC/Clang/MSVC等)输出的诊断信息。cmake --build本质是调用底层构建工具(Make/Ninja等)再触发编译器执行,所以调整CMake自身日志级别的参数不会对编译器输出产生影响,这也是你之前加--log-level=WARNING无效的原因。
方案1:修改编译参数永久关闭note输出
根据你使用的编译器,在CMake配置阶段传入对应编译选项即可:
- 如果你使用GCC/MinGW编译器:
配置CMake时添加参数:
也可以直接写入项目的CMakeLists.txt全局生效:cmake -S . -B outputDir -DCMAKE_CXX_FLAGS="-fno-diagnostics-show-note"set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-diagnostics-show-note") - 如果你使用Clang编译器:
配置CMake时添加参数:cmake -S . -B outputDir -DCMAKE_CXX_FLAGS="-fno-show-note" - 如果你使用MSVC编译器:
配置CMake时添加参数:
上述参数可以关闭MSVC默认输出的大部分非必要note提示,你也可以根据输出的具体note编号,添加对应cmake -S . -B outputDir -DCMAKE_CXX_FLAGS="/wd4820 /wd4625 /wd4626"/wd[编号]参数关闭指定note。
方案2:临时过滤输出(无需修改项目配置)
如果你不想改动编译配置,可以直接通过终端管道过滤掉note行:
- Linux/macOS 环境:
cmake --build outputDir 2>&1 | grep -v '^note:' - Windows PowerShell 环境:
cmake --build outputDir 2>&1 | Select-String -Pattern '^note:' -NotMatch
补充说明
你之前尝试的-fcompare-debug-second是GCC用于调试信息对比的专用参数,和关闭诊断note无关,因此不会生效。上述所有方案均兼容你使用的CMake 3.16.3版本,无需升级CMake。
内容的提问来源于stack exchange,提问作者Wilem2
相关产品推荐
相关产品推荐

