在我这个项目的makefile中,我为编译器指定了3个位置来查找#includes。
INCLUDES=-I. -I/home/kelly/xerces/xerces-c-3.1.1/src -I/home/kelly/Utilities_New
当我使用注释中的命令行编译以下示例代码时:
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <xercesc/util/XMLString.hpp>
using namespace std;
/*
g++ -I. -I/home/kelly/xerces/xerces-c-3.1.1/src -I/home/kelly/Utilities_New test.cpp
*/
int main(int argc, char* argv[])
{
cout << "this works" << endl;
}
In file included from /home/kelly/Utilities_New/string.h:5:0,
from /home/kelly/xerces/xerces-c-3.1.1/src/xercesc/framework/XMLBuffer.hpp:28,
from /home/kelly/xerces/xerces-c-3.1.1/src/xercesc/util/XMLString.hpp:26,
from test.cpp:7:
/home/kelly/Utilities_New/defs.h:26:21: fatal error: windows.h: No such file or directory
compilation terminated.
显然,编译器决定在处理Xerces #includes并在Utilities_New目录中找到string.h时,它已经找到了它需要的东西并停在那里。
另一个string.h是由另一个程序员编写的,我试图使用他的库。
我认为首先搜索了标准位置。我在这里有点失落。我可能会遗漏一些非常明显的东西。
另外,有没有关于#include文件的规则有&lt;&gt;与他们周围的“”和编译器应该看的位置相比?
答案 0 :(得分:0)
#include "blah"
与#include <blah>
相同,除非在与尝试包含该文件的文件相同的目录中找到blah
。 (除非您使用稀有和特定于gcc的-iquote
选项)。有关详细信息,请参阅here。