2012-03-01 123 views
2

我有一個主人Makefile調用目錄內的子畫面文件。 這些子畫面文件是由自動工具從Makefile.amconfigure.ac文件開始生成的。Makefile:爲什麼我看不到編譯輸出?

整個項目的第一個目標是共享庫,而其它的是,針對其鏈接(所以在主Makefile的依賴)的可執行文件。

問題是我只能看到共享庫的編譯輸出,而其他項目只是打印警告和錯誤(我相信只是stderr文本)。

我不明白是什麼導致了這種行爲,因爲所有的項目都是從主Makefile中的相同規則調用的,並且所有子圖形文件都是從非常看起來的配置文件自動生成的。

Makefile的,編譯所有目標的片段是這樣的:

SUBDIRS = libMylib app1 app2 app3 

$(SUBDIRS): 
    $(ECHO) "-> Building [email protected]" 
    $(MAKE) -C [email protected] 
    $(ECHO) "-> Build of [email protected] finished." 

的「的libmylib」輸出是這樣的:

-> Building libMylib 
libtool: compile: ppc-linux-gcc -DHAVE_CONFIG_H -I. -I/opt/ELDK/ppc_8xx/usr/include/ -I/opt/ELDK/ppc_8xx/include/ -Wall -std=gnu99 -O2 -MT libMylibF1.lo -MD -MP -MF .deps/libMylibF1.Tpo -c libMylibF1.c -fPIC -DPIC -o .libs/libMylibF1.o 
... 
libtool: link: ppc-linux-gcc -shared -fPIC -DPIC .libs/libMylibF1.o .libs/libMylibF2.o .libs/libMylibF3.o -Wl,-rpath -Wl,/opt/ELDK/ppc_8xx/lib -Wl,-rpath -Wl,/opt/ELDK/ppc_8xx/lib -lz -lpthread -O2 -Wl,-soname -Wl,libMylib.so.0 -o .libs/libMylib.so.0.0.0 
libtool: link: (cd ".libs" && rm -f "libMylib.so.0" && ln -s "libMylib.so.0.0.0" "libawmg.so.0") 
libtool: link: (cd ".libs" && rm -f "libMylib.so" && ln -s "libMylib.so.0.0.0" "libMylib.so") 
libtool: link: (cd ".libs" && rm -f "libMylib.la" && ln -s "../libMylib.la" "libMylib.la") 
-> Build of libAwmg finished. 

雖然任何「APPN」的輸出爲:

-> Building app1 
app1F1.c: In function `app1F1Func1': 
app1F1.c:161: warning: unused variable `varA' 
app1F2.c:85: warning: `app1F2FuncX' defined but not used 
-> Build of app1 finished. 

任何人都可以幫我嗎?


編輯:

我發現我能看到「的libmylib」編譯的東西,因爲它是「libtoolized」。 如果我「libtoolize」另一個項目,我可以看到輸出的鏈接器部分(libtool: link:...)。

因此,考慮到make要求在規則中的每個線殼(sh),即$(MAKE)等於只是「做」,默認情況下,make是冗長的,爲什麼submake不打印其輸出到標準輸出?

哪些標誌可能會傳遞給它,以便發生這種情況?

回答

2

它取決於子目錄中的Makefiles。例如,如果在應用程序Makefiles中的編譯命令前面有一個@,那麼它們將不會輸出正在運行的命令(還會查找$(Q),當您想要啓用/在makefile中禁用冗長)。或者,您的應用程序目錄中的make命令可能會將stdout推送到某些文件中(這仍然允許您看到警告)。

同理你的庫生成文件可能被錯誤地重定向標準錯誤在其他地方,這可以解釋爲什麼你沒有看到任何錯誤輸出(或者它只是好好嘗試一下有什麼錯誤...)

如果您需要更多幫助,請將構建規則發佈到其他目錄(以及所有關聯的變量定義)中。

+0

的submakefiles用了autoconf/automake的產生,所以他們是一個有點冗長,(這就是爲什麼我沒有張貼)。如果我直接在終端中運行它,我會看到預期的輸出。只有在從主Makefile調用時纔會發生。請看我上面的編輯... – j4x 2012-03-01 20:23:35

1

好了,我的主人的makefile包括放在一個.SILENT規則另一個文件。

我沒有注意到,直到今天。 刪除此規則使得按計劃運行正常。

哦,我...