2014-08-29 102 views
0

這裏是Makefile文件(的UNIX shell)如何在同一個Makefile中調用已定義的目標?

main : mainFunc.c 
    gcc -c -o main.o mainFunc.c 
other : otherSum.c 
    gcc -c -o other.o otherSum.c 
link : other.o main.o 
    gcc -o main.out other.o main.o 

如何調用它們在另一個新目標

我已經試過這樣:

doAll : 
    make main 
    make other 
    make link 

確實main.out一直建成了

但還有更多的行像「make [1]:離開/進入目錄......」

我想知道爲什麼

回答

0

這是一個寫得不好的makefile。

main目標應該是main.o以對應於正在創建的文件,而不是隻是模糊地連接到實際工作的隨機(虛假)目標。

類似地,otherlink目標應分別爲other.omain.out

而不是從doAll目標這些目標可以被列爲doAll目標(即doAll: main other link)的先決條件,並讓它們會正確處理它的身體手動運行make

話雖這麼說,如果我的第一個建議隨訪和目標本身進行修正再上市main.oother.o作爲doAll先決條件甚至不上市以來main.out會自動正確鏈中的目標了必要的。

即使更進一步,您可以完全擺脫所有這些實際規則,並讓內置規則爲您完成工作。您需要做的只是將main.out目標重命名爲main,完全刪除main.oother.o目標,並從main: other.o main.o目標定義中刪除規則體(僅將其作爲先決條件定義)。

也就是說,一個Makefile文件包括不外乎:

main: other.o main.o 

將建立正確以上你的makefile正在建設,但不化妝的不必要的重新調用和目標的手動鏈接項目/等等使用此功能,您甚至可以使用內置變量CFLAGSLDFLAGSLDLIBS指定您自己的編譯和鏈接標誌。

哦,並回答'爲什麼我會得到'make [1]:離開/進入目錄......「這個makefile的問題?'

它與做檢測遞歸和試圖幫助你知道發生了什麼。您可以使用--no-print-directory選項來抑制它。

+0

感謝您直言不諱的批評! – qweeah 2014-08-29 08:16:38

+0

@qweeah道歉,如果口氣有點太強。這不是我的意圖。 – 2014-08-29 14:00:05

相關問題