尽管使用了 -I 选项,但未找到标头

Posted

技术标签:

【中文标题】尽管使用了 -I 选项,但未找到标头【英文标题】:Header not found despite the use of the -I option 【发布时间】:2013-07-19 10:34:02 【问题描述】:

我有一个项目,其中包含不同目录中的文件。目录 A 包含两个目录 B 和 C,C 包含一个目录 D。文件位于 B、C 和 D 中。我编写了 makefile 来编译它,主 makefile 在 C 中。 C Makefile 包含以下行:

export LDFLAGS = -I ../B -I . -I ../C/D -lm

(起初我只写了“./D”而不是“../C/D”,但后来因为我得到的错误而改变,只是为了确保路径对 B 也有效。但是它没有改变任何东西)

B 中的 makefile 包含以下规则:

%.o : %.c
    $(CC) $(CFLAGS) -o $@ -c $< $(LDFLAGS)

当我运行“make”时,出现错误,因为 B 中的文件包含 D 中的文件,但它没有找到该文件。为什么 ?感谢您的帮助!

编辑:当我使用 -I 选项添加目录时,我得到完全相同的错误(相同的 B 头文件中包含相同的缺失文件),然后当我的 B makefile 上有 LDFLAGS 时,我没有请注意生成此错误更改的文件:现在它是一个 .cpp 文件,其中包含引起错误的 B 标头(包括 D 标头)。 (顺便问我为什么c文件中只有一个cpp文件,不是我开发的……) B makefile中cpp文件的行是:

%.o : %.cpp
    g++ $(CFLAGS) -o $@ -c $< $(LDFLAGS)

但是这个 .cpp 文件的 .o 不在 all 规则上(它调用 $(OBJS),定义为 OBJS = $(SRC:.c=.o))。我想这是我的错误。因为当我运行make时,它首先进入B目录并使用选项编译我的c文件,然后离开目录,因为规则:

b : 
    @(cd $(BDIR) && $(MAKE))

所以,当 make 意识到需要 myccpfile.o 时,他神奇地调用了这行代码

g++    -c -o ../B/myccpfile.o ../B/mycppfile.cpp

所以现在我真的不明白这个调用来自哪里,这真的很奇怪,因为使用 g++ 的唯一规则有 CFLAGS 和 LDFLAGS,我不明白它们为什么消失了......

【问题讨论】:

我无法重现这个。也许你可以给我们一个最小的完整例子...... 【参考方案1】:

它的CFLAGS 需要 -I 选项用于构建的编译阶段。检查 B makefile 是否使用适当的 -I 选项设置了 CFLAGS。

LDFLAGS 只会影响链接器选项。

【讨论】:

好吧,我在规则中添加了 $(LDFLAGS),它应该会影响 .o 的编译,不是吗?但是我尝试在 CFLAGS 中添加这些 -I 选项,但我仍然有错误。还是谢谢!

以上是关于尽管使用了 -I 选项,但未找到标头的主要内容,如果未能解决你的问题,请参考以下文章

尽管在标头中发送了 base64,但附件无法识别

尽管静态链接,但未找到 DLL

内部连接出错 - 尽管存在表但未找到表

尽管表存在,但未找到 Hive 表或视图

尽管在响应标头中将 iframe 选项设置为 Sameorigin,但允许其他站点嵌入视频

在响应标头中使用 apollo,cookie 但未设置