0

ファイルコンパイルの名前も取得するmakefileが必要です例:

make foo

and the makefile should compile foo.c to foo. 

これは私のメイクファイルです。変更方法は?

all: out

out: out.o 
gcc -g  -m32 -Wall -o out out.o

out.o: out.c
gcc -m32 -g  -Wall -ansi -c -o out.o out.c


.PHONY: clean

#Clean the build directory
clean: 
rm -f *.o out
4

2 に答える 2

1

引数を Make に直接渡すのは簡単です。

現在のメイクファイルは で呼び出すことができ、make fooコンパイルfoo.cして生成されます。「foo」がどのルールの対象でもなくても、エラーは発生しません。(少なくとも、これは私が使用しているものであるGNU Make 3.81の場合です。)foofoo.c => foo

コンパイラとフラグの選択を制御したい場合 (outルールのように)、それを行う方法は複数あります。最も簡単な方法は (厳密には最善というわけではありませんが)、makefile 内のいくつかの変数を変更することです。

CC = gcc
CFLAGS = -g -m32 -Wall -ansi

もう 1 つのオプションは、暗黙のルールを独自のパターン ルールでオーバーライドすることです。

%: %.c
    gcc -g -m32 -Wall -ansi -o $@ $<

別のステップでビルドする場合foo.oは、ルールを 2 つのルールに分割する必要があります。また、Make の暗黙のルールをキャンセルするレシピのないルールを挿入する必要があります。

%: %.o
    gcc -g -m32 -Wall -o $@ $^

%.o: %.c
    gcc -m32 -g  -Wall -ansi -c -o $@ $<

%: %.c

基本をマスターしたら、さらに改良することができます。

于 2013-03-03T01:42:10.370 に答える
1

Makefile に引数を直接渡す方法はありませんが、変数を利用して目的を達成することができます。以下の Makefile に加えられた変更を確認してください

NAME ?=out #Default binary generated is out if you dont pass any argument

${NAME}: ${NAME}.o

gcc -g  -m32 -Wall -o ${NAME} ${NAME}.o

${NAME}.o: ${NAME}.c

gcc -m32 -g  -Wall -ansi -c -o ${NAME}.o out.c

.PHONY: clean

#Clean the build directory

clean:

`rm -f *.o ${NAME}`

そして、次のように入力して Makefile を呼び出す必要があります。

$ make NAME=foo

$ make clean NAME=foo

于 2013-02-28T05:27:43.813 に答える