2011-07-20 6 views
1

私はmakefilesが新しく、愚かな質問であれば前もって謝ります。また、私はmakefileからほとんどの変数を削除しました。なぜなら、彼らは正しく動作していなかったからです(gnu makeは$(myvar)がmyvarの値で完全に置き換えられるはずですが、makeの出力はこれが起こっていないことを示していました)。だから私は醜さと80文字以上の行についてお詫び申し上げます。Makeはmakefileに-cをつけても自動的にリンクしようとしています

acolibobj = acoLibInit acoGlobalDefs 
acolibinterface: $(acolibobj).o 
acoLibInit.o: 
    gcc -fPIC -g -c -Wall -I/usr/include/dc1394 -o acoLibinit.o acoCommands/acoLibInterface/acoLibInit.c 
acoGlobalDefs.o: 
    gcc -fPIC -g -c -Wall -I/usr/include/dc1394 -o acoGlobalDefs.o acoCommands/acoLibInterface/acoGlobalDefs.c 

私は私が手にこのメイクファイルを実行します。これまでのところ、私が言うことができるように、何が起こっていることはmakeはコンパイルとリンクしようとしているということです、私は明示的に-cフラグを追加したにもかかわらず

gcc -fPIC -g -c -Wall -I/usr/include/dc1394 -o acoLibinit.o acoCommands/acoLibInterface/acoLibInit.c 
cc acoLibInit.o -o acoLibInit 
gcc: acoLibInit.o: No such file or directory 
gcc: no input files 
make: *** [acoLibInit] Error 1 

を。 "gcc -fPIC -g -c ..."を自分で実行すると(bashから)、私は全く問題はありません。 makeが "cc acoLibInit.o -o acolibInit"を試してみる理由は何ですか?

答えて

2

makeは、acoLibInitを作成しようとしています。それは"whatever" can be produced by linking "whatever.o"を指定する組み込みルールを持っている可能性があります。そのため、cc行が得られます。

この行:(最初の依存性に.oが存在しないことに注意)

acolibinterface: acoLibInit acoGlobalDefs.o 

acolibinterface: $(acolibobj).o 

はに展開。このため、acoLibInitをリンクしようとしています。あなたがそのターゲットの依存関係としてのみ.oファイルをしたい場合は

acolibinterface: $(addsuffix .o,$(acolibobj)) 

はこれを試してみてください。

2

$(acolibobj).oは、acoLibInit acoGlobalDefs.oに拡張されています。このように、あなたが本当に言っている:

acolibinterface: acoLibInit acoGlobalDefs.o 

単にacolibobj = acoLibInit.o acoGlobalDefs.oを定義し、acolibinterface: $(acolibobj)を使用しています。

関連する問題