2016-03-21 15 views
0

はgccで、このメイクファイルをコンパイルしている間は、私がgccの無効なコマンドラインオプション

cannot specify -o with -c, -S or -E with multiple files" 

今、私はそれが二度同じファイルをコンパイルしようとは何かを持っているが、私は方法がわからないことを推測エラーを受信しました。

assembler : main.o assembler.o utils.o 
    gcc -g -ansi -Wall -pedantic -lm main.o assembler.o utils.o -o assembler 
main.o : main.c assembler.h utils.h 
    gcc -c -ansi -Wall -pedantic -lm main.c assembler.h utils.h -o main.o 
assembler.o : assembler.c 
    gcc -c -ansi -Wall -pedantic -lm assembler.c -o assembler.o 
utils.o : utils.c structs.h 
    gcc -c -ansi -Wall -pedantic -lm utils.c structs.h -o utils.o 

ファイルは次のように含まれています

structs.h is included in utils.c, 
utils.c is included in utils.h, 
utils.h is included in assembler.c, 
assembler.c is included in assembler.h, 
assembler.h is included in main.c. 

(:、それは私がコードの生成にそれを行う作っ理由がわからない...

+0

は理にかなっています呼び出される。 – EOF

+0

ヘッダを "コンパイル"せずにcompilコマンドから取り出しますが、実際に依存しています – Guiroux

+0

BTW:utils.h_に_utils.cが含まれていて、_assembler.cがassembler.h_に含まれています。センス。 .hファイルは.cファイルに含まれますが、それ以外の方法ではありません。 –

答えて

0

あなたはprobbalyこのメイクファイル(単にgccのコマンドから.hファイルを削除する)必要があります。おそらく、より良い方法

assembler : main.o assembler.o utils.o 
    gcc -g -ansi -Wall -pedantic -lm main.o assembler.o utils.o -o assembler 

main.o : main.c assembler.h utils.h 
    gcc -c -ansi -Wall -pedantic main.c -o main.o 

assembler.o : assembler.c 
    gcc -c -ansi -Wall -pedantic assembler.c -o assembler.o 

utils.o : utils.c structs.h 
    gcc -c -ansi -Wall -pedantic utils.c -o utils.o 
+1

main.cをコンパイルする行には "-lm"または "-o main.o"を含めないでください。また、assembler.cとutils.cの行にも同様に記述してください。 – FredK

0

あなたのメイクファイルが誤ってすべて追加されます最初のものではなく、コンパイルコマンドに依存することがあります。その結果、ヘッダーファイルを翻訳単位としてコンパイルしようとしていますが、これは適切ではありません。 リンクコマンド内のすべての依存関係を追加します。このコマンドは、複数のオブジェクトファイルを実行可能ファイルに結合します。しかし、エラーメッセージに示すように、-cオプションを使用してオブジェクトファイルを作成する場合、複数のソースファイルを提供することはできません。

したがって、コンパイルレシピは通常$<(最初の依存関係)を使用し、リンクレシピは$^(すべての依存関係)を使用します。メイクマニュアルのautomatic variables chapterを参照してください。

0

を:リンカがする場合は、複数のソースファイルを指定

assembler:: main.o assembler.o utils.o 
    gcc -o [email protected] main.o assembler.o utils.o -lm 
.c.o: 
    gcc -c -g -ansi -Wall -pedantic $*.c 
関連する問題