【发布时间】:2012-03-19 22:15:40
【问题描述】:
我有一个主 Makefile 在目录中调用 submakefile。
这些子makefile 是由自动工具从Makefile.am 和configure.ac 文件开始生成的。
整个项目的第一个目标是一个共享库,而其他的都是链接到它的可执行文件(因此在主Makefile中有一个依赖项)。
问题是我只能看到共享库的编译输出,而其他项目只是打印警告和错误(我相信只是stderr文本)。
我不明白是什么导致了这种行为,因为所有项目都是从主 Makefile 中的相同规则调用的,并且所有子makefile 都是从看起来非常相似的配置文件自动生成的。
编译所有目标的masterMakefile的sn-p如下所示:
SUBDIRS = libMylib app1 app2 app3
$(SUBDIRS):
$(ECHO) "-> Building $@"
$(MAKE) -C $@
$(ECHO) "-> Build of $@ 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 为规则中的每一行调用一个 shell (sh),$(MAKE) 等于“make”,默认情况下,make 是冗长的,为什么submake 没有将其输出打印到标准输出?
可以将哪些标志传递给它以便发生这种情况?
【问题讨论】:
标签: makefile gnu-make automake