相关疑难解决方法(0)

使用qmake时是否有可能通过包括via -isystem

我使用qmake作为makefile构建器,并希望坚持下去.此外,我想使用"gcc -Wall -Werror -Wundef -Wextra"来获得健壮的代码.我正在考虑"-pedantic",但这是更进一步的道路.我目前的主要问题是图书馆产生的大量警告,如激励,部分qt等.

每当我包含警告生成标题时,我都会使用编译指示

    #pragma GCC diagnostic ignored "-Wall"
    #include <QtGui>
    ...
    #include <QWidget>
    #pragma GCC diagnostic error "-Wall"
Run Code Online (Sandbox Code Playgroud)

这远非可爱,相当乏味和繁琐,特别是其他程序员也必须这样做.是否有使用qmake的选项允许包含qt-libraries作为系统头,从而压制他们的警告.对于简单的makefile和cmake我知道 - 系统但我找不到这个qmake吊坠.

gcc qmake suppress-warnings

9
推荐指数
1
解决办法
3145
查看次数

CMake target_include_directories(SYSTEM ...): SYSTEM 选项似乎不适用于针对 Xcode 的最新版本的 CMake

我们正在构建一个依赖于 Boost 的应用程序,编译在 Boost 头文件 (tag_of.hpp) 中生成大量警告“不能重新声明类成员”

为了避免垃圾邮件构建日志,我们决定将 Boost 标头作为系统标头包含在内:

target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
Run Code Online (Sandbox Code Playgroud)

我们的理解是该命令应该将 Boost 包含目录放在-isystem编译器标志后面。然而,它没有做这样的事情,而是将它放在标题搜索路径中的“正常”包含目录旁边。

环境为CMake 3.0.0,为Xcode 5.1.1生成项目文件。这似乎是其他一些人的问题(请参阅此答案中的最后两条评论)。

有没有一种工作方法可以将标题作为系统包含在内?


编辑:刚刚在相同的环境中测试,将 CMake 更新到版本3.3.0,行为是相同的。


编辑:这是一个最小的例子,它显示了我的环境中的问题

cmake_minimum_required(VERSION 3.0)

find_package(Boost 1.49 COMPONENTS)

project(system_dependencies)

add_executable(${PROJECT_NAME} main.cpp)

target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})
Run Code Online (Sandbox Code Playgroud)

从此脚本生成的 Xcode 项目文件将 Boost 的路径放在构建设置中:Header search path,而不是将其附加在-isystem编译器标志后面。IDE发出的编译命令证实了这一点:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x c++ -arch x86_64 -fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit =0 -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -Wno-non-virtual-dtor …

c++ xcode cmake include

4
推荐指数
1
解决办法
2916
查看次数

系统上的-isystem包含目录导致错误

以下代码是怎么回事?

#include <cmath>

int
main(int argc, char *argv[])
{
}
Run Code Online (Sandbox Code Playgroud)

在最近的带有GCC 6.1.1的Arch Linux安装中编译时,-isystem /usr/include它会生成以下标志:

$ g++ -isystem /usr/include math.cc 
In file included from math.cc:1:0:
/usr/include/c++/6.1.1/cmath:45:23: fatal error: math.h: No such file or directory
 #include_next <math.h>
                       ^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

这是一个非常简化的示例;原始命令行为:

$ g++ ... -isystem `llvm-config -includedir` ...
Run Code Online (Sandbox Code Playgroud)

使用LLVM的程序的一部分。在Arch Linux上,LLVM软件包安装时带有其标头目录/usr/include,该标头目录为llvm-config。...包括了-Wextra-Wconversion,它们在LLVM标头中引起警告。与-isystem标志相反-I,该标志通过将LLVM目录视为“系统头” 来防止警告。有关更多信息,请参见GNU C预处理程序文档

但是,如果升级到GCC 6.1.1,则上述错误会显示在内部版本中。

gcc

4
推荐指数
1
解决办法
2968
查看次数

标签 统计

gcc ×2

c++ ×1

cmake ×1

include ×1

qmake ×1

suppress-warnings ×1

xcode ×1