1

私はmakefileでかなり新しいです。yu.c をコンパイルし、yu.c をリンクして yu という実行可能ファイルを取得するメイクファイルを作成しようとしています。
以下は私が持っているコードです。make -f mymakefile を使用してファイルを実行していますが、実行するたびに gcc -c yuFile.c のみが実行されます。どこが間違っていますか?

CC=gcc

yu.o: yuFile.c
    ${CC} -c yuFile.c
yu: yuFile.o
    ${CC} yu -o yuFile.o
run-c: yu
    ./yu
clean:
    rm -f "*.o" core
4

2 に答える 2

2

makeターゲットが指定されていない場合、ファイル内の最初のターゲットになるため、この場合は と同等make yu.oです。

通常、allすべてがビルドされるように最初のターゲットを作成します。

all: yu
.PHONY: all

(すでに名前が付けられたファイルがある場合、 は何もしない.PHONYことに注意してください)。makeall

指摘する価値がありますyu。ターゲットで引数が逆になっています。そのはず

yu: yuFile.o
    ${CC} yuFile.o -o yu

またはより一般的に

yu: yuFile.o
    ${CC} $^ -o $@

(自動変数$^に記載されているように、すべての前提条件を$@意味し、ターゲットを意味します)。

于 2012-10-14T17:50:43.433 に答える
0

最初のターゲットは、引数が指定されていない場合に選択されるターゲットです。標準では、最初に「すべて」のターゲットを設定します。

all:ゆ

また、「yu」ターゲットが正しくありません。

yo: yufile.o
   $(CC) -o $@ $^

動作するはずです

于 2012-10-14T17:51:30.413 に答える