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

QtCreator's code inspector breaks when I use -isystem flag instead of INCLUDEPATH

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

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

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

INCLUDEPATH += ../libs/boost159/

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

我最初想将此作为错误报告,但在收到一些报告后,我不再相信 QtCreator 开发人员会考虑修复此问题。相反,我来这里是为了解决问题。

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

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

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

隐式地:如何创建一个仅在QtCreator解析项目文件时trigger/not触发的条件表达式?

我找到了解决办法。您需要使用 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
}

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