2012-03-01 20 views
2

私はMakefileというマスタを持っており、ディレクトリ内でサブファイルを呼び出します。 これらのサブファイルは、Makefile.amおよびconfigure.acファイルから始まるautotoolsによって生成されます。Makefile:コンパイル出力が表示されないのはなぜですか?

プロジェクト全体の最初のターゲットは共有ライブラリですが、他のターゲットはそれにリンクする実行可能ファイルです(したがって、メインMakefileに依存関係があります)。

問題は共有ライブラリのコンパイル出力しか見ることができませんが、他のプロジェクトは警告とエラーを印刷しているだけです(ちょっとstderrのテキストだと思います)。

すべてのプロジェクトがマスターMakefileの同じルールから呼び出され、すべてのサブファイルが非常に見える構成ファイルから自動生成されるため、この現象の原因を理解できません。

すべてのターゲットをコンパイルマスターMakefileのスニペットは次のようになります。いずれかの「APPN」の出力ですが

-> 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. 

SUBDIRS = libMylib app1 app2 app3 

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

「のlibmylib」の出力は次のようです:

-> 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:

私はそれが「libtoolized」であるので、私は「のlibmylib」でコンパイルのものを見ることができたことが分かりました。 別のプロジェクトを「libtoolize」すると、出力のリンカ部分(libtool: link:...)が見えます。

ので、makeは$(MAKE)は単にデフォルトでは、「作る」とする等しいこと、ルール内の各ラインのシェル(sh)を呼び出すことを考えると、makeは冗長である、なぜsubmakeが印刷されていないんそのstdoutに出力しますか?

これが起こるように、どのフラグを渡すことができますか?

答えて

2

サブディレクトリのMakefileによって異なります。たとえば、アプリケーションのMakefileのコンパイルコマンドの前に@があると、実行中のコマンドを出力しません($(Q)も検索します)。/makefileの冗長性を無効にする)。代わりに、appsディレクトリ内のmakeコマンドがstdoutをいくつかのファイルにプッシュしている可能性があります(これにより、警告が表示されます)。あなたはその上の任意のエラー出力が表示されない理由を説明するだろうあなたのライブラリーのメイクファイルが誤って別の場所に標準エラー出力をリダイレクトすることができる同じトークンによって

(またはそれだけですべてのエラーを持っているdoens't ...)

他のディレクトリ(およびすべての関連する変数定義)にビルドルールを投稿してください。

+0

submakefilesはautoconfの/ automakeにによって生成されているので、彼らは少し冗長です(と私はそれを投稿していない理由です)。私が端末で直接実行した場合、出力は期待通りに見えます。この問題は、メインのMakefileから呼び出されたときにのみ発生します。上記の私の編集を見てください... – j4x

1

まあ、私のマスターメイクファイルはで.SILENTルールを置く別のファイルが含まれています。

私は今日までということに気づいていません。 このルールを削除すると、予定どおりに動作します。

私のああ...

関連する問題