Cygwin中包含以下内容的简单C ++编译错误

时间:2018-11-17 12:43:02

标签: c++ cygwin

我发现一个没有依赖性的小型C ++项目将无法在Cygwin下使用GCC或Clang进行编译。在Ubuntu下没有问题;而且我已经使用此代码两年了。我将介绍MWE。

当在一个子目录中包含一个标头时会出现问题,该标头本身也包含另一个标头,该标头位于同一子目录中,但在提供给include指令的路径中由该子目录指定。执行以下命令可以复制该错误:

mkdir foo
echo \#include \"foo/includes.hpp\" > inc.hpp
echo \#include \"foo/bar.hpp\" > foo/includes.hpp
touch foo/bar.hpp
g++ -c inc.hpp

在64位Ubuntu 18.10上,最终的GCC(或Clang)调用不会产生任何错误。在Windows 10下的64位Cygwin上,显示以下错误消息。

In file included from inc.hpp:1:0:
foo/includes.hpp:1:10: fatal error: foo/bar.hpp: No such file or directory
 #include "foo/bar.hpp"
          ^~~~~~~~~~~~~
compilation terminated.

有人可以阐明这个问题吗? (顺便说一句,我本人非常了解如何正确包含头文件-这与Cygwin和Ubuntu之间的区别有关。)

1 个答案:

答案 0 :(得分:1)

如果您使用foo/includes.hpp

""应该具有本地包含。

那将是:

#include "bar.hpp"

用于搜索标头的路径的规范对于所有编译器都是自定义的,尽管""所包含的内容应视为包含该内容的文件的本地文件,而不是所编译的文件。< / p>

基本上是:

  • 在当前标题的当前文件夹中查找具有该名称的文件
  • 使用与<>之后相同的路径

当然,正如我已经说过的那样,有一天可能会改变一个新的编译器。但是可以肯定地说,这是所有编译器(What is the difference between #include <filename> and #include "filename"?)的行为。