我有一個項目,其中包含不同目錄中的文件。目錄A包含兩個目錄B和C,並且C包含目錄D.文件位於B,C和D.我已經編寫了makefile來編譯該目錄,其中主要生成文件爲C. C Makefile包含以下行:儘管使用-I選項,仍未找到標題
export LDFLAGS = -I ../B -I . -I ../C/D -lm
(起初代替「../C/D」我寫了「./D」,但後來因爲我得到的錯誤而改變了,只是爲了確保路徑對於B也是有效的。然而,它並沒有改變任何東西)
B中生成文件包含以下規則:
%.o : %.c
$(CC) $(CFLAGS) -o [email protected] -c $< $(LDFLAGS)
當我運行「make」時,出現錯誤,因爲B中的文件包含D中的文件,並且沒有找到該文件。爲什麼?謝謝你的幫助 !
編輯:因爲我得到完全相同的錯誤(相同的B頭文件中包含相同的缺失文件),當我用-I選項添加目錄時,然後當我在我的B makefile上有LDFLAGS時,注意生成這個錯誤更改的文件:現在它是一個.cpp文件,其中包含B頭文件,其中包含引發錯誤的D頭文件。 (不要問我爲什麼有中c。通過文件的方式一個CPP文件,這不是我制定了......) 用於在B生成文件cpp文件的線路有:
%.o : %.cpp
g++ $(CFLAGS) -o [email protected] -c $< $(LDFLAGS)
但是.cpp文件的.o不在全部規則中(它調用$(OBJS),定義爲OBJS = $(SRC:.c = .o))。我想這是我的錯誤。因爲當我運行make時,它首先進入第B目錄和編譯我的C文件與選項,然後退出目錄,因爲規則的:
b :
@(cd $(BDIR) && $(MAKE))
所以時許意識到需要的是myccpfile.o,他奇蹟般地叫線
g++ -c -o ../B/myccpfile.o ../B/mycppfile.cpp
所以,現在我真的不明白的地方這個電話來自何方,這是非常奇怪的,因爲使用G ++有CFLAGS和LDFLAGS唯一的規則,我不明白他們爲什麼消失了。 ..
我無法重現這一點。也許你可以給我們一個最小的完整例子... – Beta