2011-09-08 11 views
0

私の現在のメイクが好きにこのGNUのMakefile、Cプログラミング

all: hello 

hello: hello.o 
    clang -o hello hello.o 

hello.o: hello.c 
    clang -Wall -std=c99 -c -o hello.o hello.c -lpthread 

clean: 
rm -f *.o *exe hello 

どのように私は次のようにコンパイルすることを変更することができますになります。

clang -std=gnu99 -Wall -o hello hello.c -lpthread 
+0

'* exe'は危険です。多分あなたは' * .exe'を意味するかもしれませんが、Mac OS Xではちょっと意味がありません。 .. –

+2

あなたの質問は何ですか?テキストの行をテキストの別の行に置き換えて変更する方法を尋ねていますか?エディタと呼ばれるツールを使用できます。私はMac用に1つか2つあると確信しています。 –

+0

@Amardeepはい私はエディタを使用しましたが、エラーが出て他の方法で試しました。私はちょうどそれを理解するのが簡単であるように質問をまっすぐにするべきかもしれないと思った。 – user870565

答えて

1

これを試してみてください - 通常は最高行うにはコンパイルはいくつかのステップです。代わりに、あなたが今、ハローとhello.oを持っている二つの規則の

all: hello 

hello: hello.o 
    clang -o hello hello.o -lpthread 

hello.o: hello.c 
    clang -Wall -std=c99 -c -o hello.o hello.c 

clean: 
rm -f *.o hello 
4

使用

hello: hello.c 
    clang -std=gnu99 -Wall -o hello hello.c -lpthread 

しかし、プログラムが大きくなると、オブジェクトファイルへのコンパイルとリンクの分離は、ある時点ですべてをコンパイルしてリンクするよりも速くなります。分離されたコンパイルとリンクされていないコンパイル単位は毎回再コンパイルする必要はありません。

1

変更するには、1行だけを変更する必要があります。代わりに、いくつかの変数を使用してよりきれいにする必要があります:

# C compiler 
CC = clang 
# Additional libraries 
LIBS = -lpthread 
# Compiler flags 
CCFLAGS = -std=gnu99 -Wall $(LIBS) 
# Output executable 
OUT = hello 

all: hello 

hello: hello.o 
    $(CC) $(CCFLAGS) -o $(OUT) hello.o 

hello.o: hello.c 
    clang $(CCFLAGS) -c -o hello.o hello.c 

clean: 
    rm -f *.o $(OUT) 
関連する問題