我发现一个没有依赖性的小型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之间的区别有关。)
答案 0 :(得分:1)
foo/includes.hpp
, ""
应该具有本地包含。
那将是:
#include "bar.hpp"
用于搜索标头的路径的规范对于所有编译器都是自定义的,尽管""
所包含的内容应视为包含该内容的文件的本地文件,而不是所编译的文件。< / p>
基本上是:
<>
之后相同的路径当然,正如我已经说过的那样,有一天可能会改变一个新的编译器。但是可以肯定地说,这是所有编译器(What is the difference between #include <filename> and #include "filename"?)的行为。