2012-03-01 7 views
2

У меня есть мастер Makefile, который вызывает файлы подкачки внутри каталогов. Эти файлы подкачки создаются с помощью autotools, начиная с Makefile.am и configure.ac файлов.Makefile: Почему я не вижу вывод компиляции?

Первой целью всего проекта является разделяемая библиотека, в то время как другие являются исполняемыми файлами, которые ссылаются на нее (так что есть зависимость в основном Makefile).

Проблема заключается в том, что я могу видеть только вывод компиляции в общей библиотеке, в то время как другие проекты просто печатают предупреждения и ошибки (только текст , я считаю).

Я не могу понять, что вызывает это поведение, поскольку все проекты вызываются из того же правила в главном 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. 

Может ли кто-нибудь мне помочь?


EDIT:

Я узнал, что я был в состоянии видеть вещи компиляции в «libMylib», потому что это «libtoolized». Если я «libtoolize» другого проекта, я могу увидеть компоновщик на выходе (libtool: link:...).

Таким образом, учитывая, что make называет оболочку (sh) для каждой строки в правиле, что $ (MAKE) равна просто «делать» и, по умолчанию, make многословен, почему делать submake не печатает его вывод в stdout?

Какие флаги могут быть переданы ему, чтобы это произошло?

ответ

2

Это зависит от Make-файлов в подкаталогах. Если, например, у вас есть @ перед командами компиляции в приложении Makefiles, то они не будут выводить команды, которые выполнялись (также смотрите $ (Q), который используется довольно часто, когда вы хотите включить/отключить многословность в make-файлах). Кроме того, ваши команды make в каталогах приложений могут вызывать stdout для некоторых файлов (что все равно позволит вам видеть предупреждения).

К тому же ваша библиотека Makefile может быть неправильно перенаправляет поток ошибок в других местах, которые бы объяснить, почему вы не видите никаких выходов ошибок на что (или просто doens't есть какая-либо ошибка ...)

Если вам нужна дополнительная помощь, отправьте правила сборки в других каталогах (и всех связанных определениях переменных).

+0

В submakefiles генерируются AUTOCONF/Automake, поэтому они немного многословным (и именно поэтому я не отправил его). Если я запустил любой из них непосредственно в терминале, я вижу результат как ожидалось. Дело происходит только при вызове из основного Makefile. Пожалуйста, см. Мое редактирование выше ... – j4x

1

Ну, господин мой Makefile включает другой файл, который помещает .SILENT правила в.

Я не заметил, что до сегодняшнего дня. Удаление этого правила делает непрерывную работу, как ожидалось.

Ой ...

Смежные вопросы