g++
给我错误的形式:
foo.cc:<line>:<column>: fatal error: <bar>: No such file or directory
compilation terminated.
在编译C程序时是一样的。
为什么?
发布于 2018-05-14 19:33:37
编译器只是试图编译名为的文件foo.cc
。在命中行号时line
,编译器发现:
#include "bar"
要么
#include <bar>
编译器然后尝试找到该文件。为此,它使用一组目录来查看,但在该组中,没有文件bar
。
g++
有一个选项-I
。它允许将包含搜索路径添加到命令行。假设文件bar
位于名为的文件夹中frobnicate
,相对于foo.cc
(假设正在从所在目录编译foo.cc
):
g++ -Ifrobnicate foo.cc
可以添加更多包含路径; 你给的每一个都是相对于当前目录。微软的编译器有一个相关的选项/I
,或者在Visual Studio中,可以在配置属性 - > C / C ++ - >常规 - >其他包含目录下,在项目的属性页面中设置文件夹。
现在假设你有bar
不同文件夹中的多个版本,因为:
// A/bar
#include<string>
std::string which() { return "A/bar"; }
// B/bar
#include<string>
std::string which() { return "B/bar"; }
// C/bar
#include<string>
std::string which() { return "C/bar"; }
// foo.cc
#include "bar"
#include <iostream>
int main () {
std::cout << which() << std::endl;
}
最重要的#include "bar"
是最左边的:
$ g++ -IA -IB -IC foo.cc
$ ./a.out
A/bar
正如你看到的,当编译器开始寻找通过A/
,B/
并且C/
,它停在第一个或最左边打。
这两种形式都是如此,include <>
而且incude ""
。
#include <bar>
和#include "bar"
之间的区别通常,#include <xxx>
它首先会查看系统文件夹,#include "xxx"
使其首先查看当前或自定义文件夹。
例如:
想象一下项目文件夹中有以下文件:
list
main.cc
与main.cc
:
#include "list"
....
为此,编译器会将该文件放在list项目文件夹中,因为它当前正在编译main.cc
并且list
当前文件夹中有该文件。
但是main.cc
:
#include <list>
....
然后g++ main.cc
,你的编译器会寻找到系统文件夹第一,因为<list>
是一个标准的头,将#include
文件命名list
随你的C ++平台为标准库的一部分。
https://stackoverflow.com/questions/-100008467
复制相似问题