#include - 从<>切换后构建失败至 ””

时间:2018-03-21 07:20:59

标签: c linux gcc include gentoo

Nokogumbo gem的C实现中的提交导致构建在Gentoo Linux上失败,但是,修改是次要的,不应该造成任何麻烦。不幸的是,我知道zilch旁边的C。

这是提交:

https://github.com/rubys/nokogumbo/commit/8b4446847dea5c614759684ebcae4c580c47f4ad

它只是将<>替换为""

-#include <gumbo.h>
-#include <error.h>
-#include <parser.h>
+#include "gumbo.h"
+#include "error.h"
+#include "parser.h"

根据GCC docs,这不应该造成任何麻烦,因为它会回到以前的行为:

  

#include "file"

     

此变体用于您自己程序的头文件。它首先在包含当前文件的目录中搜索名为file的文件,然后在quote目录中搜索,然后搜索用于<file>的相同目录。您可以使用-iquote选项将目录添加到引用目录列表中。

不幸的是,虽然它与<>编译得很好,但构建失败并显示""

compiling nokogumbo.c
nokogumbo.c:24:20: fatal error: parser.h: No such file or directory
#include "parser.h"

我想知道<>""的行为方式在多大程度上取决于工具链,环境和其他设置。

非常感谢您的提示!

2 个答案:

答案 0 :(得分:0)

重新安装&#34; gumbo&#34;在Gentoo框上修复了问题。显然,当地的安装混乱产生了这种奇怪的行为。

答案 1 :(得分:-1)

我检查了你的git存储库,我注意到你使用--std=c99编译代码。我认为这可能会导致问题,因为我在C99草案中找到了这个:

  

在实现定义中搜索指定的源文件   如果不支持此搜索,或者搜索失败,则   指令被重新处理,就像它读取

一样
#include <header>

因此,它意味着流程首先是实现定义,如果不支持则使用#include<>模式。但这意味着如果它定义#include""搜索当前目录,它将停止搜索#include<>