当我使用-isystem标志而不是INCLUDEPATH时,QtCreator的代码检查器会中断

时间:2016-01-21 12:57:19

标签: c++ qt qt-creator qmake

我想抑制来自外部库的警告,这可以通过marking them as system libraries完成。我发现这是如何在.pro QtCreator项目文件中执行此操作:

QMAKE_CXXFLAGS += -isystem ../libs/boost159/

问题是QtCreator依赖于INCLUDEPATH设置,期望这样:

INCLUDEPATH += ../libs/boost159/

如果我删除它,QtCreator将无法再找到boost库:

image description

我原本想将此报告为一个错误,但在一些报告之后我不再相信QtCreator开发人员会考虑修复它。相反,我来这里是为了解决方法。

因为qmake has conditional statements我可以使用这样的东西:

isCompiling {
    QMAKE_CXXFLAGS += -isystem ../libs/boost159/
} else {
    INCLUDEPATH += ../libs/boost159/
}

因此,QtCreator的解析不会失败,但在编译时,将使用isystem。有什么想法吗?

明确地:如何在QtCreator解析项目文件时创建只触发/不触发的条件表达式?

1 个答案:

答案 0 :(得分:3)

我发现了解决方案。您需要使用qmake个附加参数并指定您选择的变量,然后测试它是否已定义。由于QtCreator不知道这些参数,因此它不会执行用于编译的块:

# This variable is set as "CONFIG += compiling"
# The assignment is done in qmake command line argument
compiling {
  # This block takes effect during real compilation
  QMAKE_CXXFLAGS += -isystem ../libs/boost159/ -isystem ../libs/openssl/include
} else {
  # This block is seen by QtCreator and other tools that do not have 'CONFIG compiling' defined
  INCLUDEPATH += ../libs/boost159/ ../libs/openssl/include
}

然后必须在项目管理中完成设置。不要忘记为发布和调试设置它:

image description