c++ - CMake:为我的项目设置警告标志,但不包含 header

标签 c++ cmake llvm

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

我有一个源文件,例如:

// 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 header 的警告?

最佳答案

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

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

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

关于c++ - CMake:为我的项目设置警告标志,但不包含 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66072350/

相关文章:

cmake - 如何在cmake中静态链接到glibc

c++ - 加载 LLVM 插件时 undefined symbol

c++ - AllocaInst 的使用示例 : LLVM

c++ - 提供通用枚举类型作为模板参数

CMake 拒绝第二个 target_link_libraries 谈论 "keyword"与 "plain"

c++ - 如何使用指定长度的sscanf

hyperlink - 使用 target_link_libraries 的宏中的 CMake 错误

go - 我正在使用 Antlr4 创建一种语言,然后我想用它生成 LLVM IR。我是否需要手写 LLVM IR 来响应我的访问者事件?

c++ - 动态规划算法N、K问题

c++ - 使用临时对象而不将其存储在变量中