3

ソース ファイルtest.cとそのヘッダーtest.h、ファイルmain.cmakefile. test.c(1) コンパイルして実行可能ファイルをビルドし、test.o(2) コンパイルtest.cしてアセンブリ コードをtest.susing-Sフラグに出力するようにメイクファイルを設定したいと考えています。

私は正しいと思ったようにメイクファイルをセットアップしようとしましたが、もちろんこれは実際には最後のtest.s行を実行しません。

FLAGS = -c -Wall
CC = gcc
ASM = -S

all : optimize
optimize: main.o test.o
    $(CC) main.o test.o -o optimize
main.o: main.c test.h
    $(CC) $(FLAGS) main.c
test.o: test.h test.c
    $(CC) $(FLAGS) test.c
test.s: test.h test.c
    $(CC) $(ASM) -Wall test.c

test.s と test.oの両方を作成するために、これを別の方法で構造化する方法を誰か教えてもらえますか?

optimize:行と次の行を次のように変更しようとしました。

optimize: main.o test.o test.s
    $(CC) main.o test.o test.s -o optimize

しかし、リンカーはエラーを出しましたmultiple definition of 'test'

4

1 に答える 1

2

で始まる行にtest.sを追加するだけoptimize:です。

test.sこれは、最適化行の依存関係にルールを追加することです。

Vaughn Catoが提案したように、すべての行に追加することもできます。

ルールtest.sとファイルtest.sには違いがあることを知っておくことが重要です。

ルールの名前として任意の名前を付けることができますが、慣例により、通常はファイル名を使用します。

これがあなたが望むことをするMakefileの例です。わかりやすくするために、すべての下にdepを配置しmake asm、ルール名もasmに変更しました。

FLAGS = -c -Wall
CC = gcc
ASM = -S

all : optimize asm
optimize: main.o test.o
    $(CC) main.o test.o -o optimize
main.o: main.c test.h
    $(CC) $(FLAGS) main.c
test.o: test.h test.c
    $(CC) $(FLAGS) test.c
asm: test.h test.c
    $(CC) $(ASM) -Wall test.c -o test.s

最後に、Makefileの動作について少し不安定に思われるため(正直に非難することはありません)、このチュートリアルを読むことをお勧めします:http: //mrbook.org/tutorials/make/

于 2012-11-11T18:28:53.210 に答える