【发布时间】:2017-02-21 18:00:58
【问题描述】:
我有一个只有以下代码的 main.cpp 文件:
#include <iostream>
#include "include/rapi/RApi.h"
using namespace std;
int main() {
std::cout << "Test\n";
return 0;
}
当我编译时,我希望看到来自我的代码的警告,而不是来自外部包含文件的警告。我过去已经能够做到这一点,但我可能在编译标志中遗漏了一些东西,因为当我不想看到它们时,我不断地从包含的头文件中看到错误。
这是我的编译命令:
g++ -isystem include -pedantic -Wall -Wextra main.cpp -o main.o
我想查看 main.cpp 中的警告和错误,而不是 include 文件夹中的文件。
我试过-isysteminclude-isysteminclude/rapi,将-isystem 传递到标志的末尾,但无济于事。
我错过了什么吗?
【问题讨论】:
-
您是否尝试使用
<>代替?这些用于系统标题。 -
@tuple_cat 据我所知,你不能只是改变它。 适用于系统头文件,而不适用于与项目其余部分位于同一文件夹中的文件。
-
你为什么不能呢?我的意思是
#include <RApi.h>。如果我将其更改为使用",我会从该文件中收到警告。我从来没有听说过你不能把系统头文件和项目的其他部分放在同一个文件夹中,并且在 g++ 手册中没有找到任何这样的说法。 -
我认为您需要将
-isystem include添加到您的编译行,然后在您的源文件中使用#include "rapi/RApi.h"(而不是include)。-isystem选项仅适用于使用该搜索路径找到的标头,但如果您#include "include/rapi/RApi.h"则没有使用搜索路径,它直接包含标头。 -
""vs<>的使用并没有真正的意义。这完全取决于编译器实现有什么区别(标准没有说明它)。大多数编译器都实现了它,因此如果您使用"",那么编译器首先在当前目录中查找,然后在-I和默认位置给出的任何目录中查找,如果您使用<>,那么它只在-I中查找和系统目录,而不是当前目录(除非你使用-I.或其他东西)。
标签: c++ c++11 makefile compilation