首页 > 解决方案 > CMake:为我的项目设置警告标志,但不包括标题

问题描述

我正在构建一个包含 llvm 的项目。我想为我的代码启用警告,但忽略来自 llvm 标头中代码的警告。

我有一个源文件,如:

// main.cpp
#include <llvm/IR/Instructions.h>

void foo() {
   // blah blah blah
} 

和一个 CMake 文件,如:

add_executable(prog main.cpp)
target_link_libraries(prog ${llvm_libs})
target_compile_options(prog PRIVATE "-Weverything")

但是-Weverything当我只关心在我自己的代码中看到警告时,会在包含的 llvm 文件中产生大量警告。

如何为我的代码启用警告,而不会看到包含的 llvm 标头的警告?

标签: c++cmakellvm

解决方案


您需要在 CMake 文件中正确配置包含目录。这样的事情应该可以解决问题:

target_include_directories(prog <your project-specific include dirs>)
target_include_directories(prog SYSTEM ${LLVM_INCLUDE_DIRS})

这样编译器会将 LLVM 标头视为“第三方”,并且不会为它们发出任何警告。


推荐阅读