2013-07-19 19 views
0

我有一個項目,其中包含不同目錄中的文件。目錄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唯一的規則,我不明白他們爲什麼消失了。 ..

+0

我無法重現這一點。也許你可以給我們一個最小的完整例子... – Beta

回答

0

CFLAGS需要th構建編譯階段的e-I選項。檢查B makefile是否使用適當的-I選項設置了CFLAGS。

LDFLAGS只會影響鏈接器選項。

+0

那麼,因爲我在規則中添加了$(LDFLAGS),它應該會影響.o的編譯,不是嗎?但是我試圖在CFLAGS中添加這些-I選項,但我仍然有錯誤。不管怎麼說,還是要謝謝你 ! – user2299676

相關問題