提问者:小点点

尽管使用了-i选项,仍未找到标头


我有一个项目的文件在不同的目录。目录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 makefile上添加LDFLAGS时,我得到了完全相同的错误(相同的B头文件上包含了相同的丢失文件),我没有注意到生成此错误更改的文件:现在是一个包含B头和D头的。cpp文件引发了此错误。(不要问我为什么c文件中有一个cpp文件,顺便说一下,不是我开发的。。。)B makefile中cpp文件的行如下:

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

但是这个。cpp文件的。o不在all规则上(it调用(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个答案

匿名用户

它的要求在构建的编译阶段使用-i选项。检查B makefile已使用适当的-i选项设置了CFLAGS。

将只影响链接器选项。