2012-04-03 24 views
7

私の質問は簡単ですが、解決策を得るために数時間の研究を失ってしまいました。私はディレクトリ内の各.cファイルの実行可能ファイルを作成するMakefileを作成しようとしています。Makefile - フォルダ内の各.cの実行ファイルを作成します。

私は次のことを試してみました:

CC = gcc 
SRCS = $(wildcard *.c) 
OBJS = $(patsubst %.c,%.o,$(SRCS)) 

all: $(OBJS) 
$(CC) $< -o [email protected] 

%.o: %.c 
    $(CC) $(CPFLAGS) -c $< 

が、それは任意の実行ファイルのみ.oファイルを作成し、されていないこの方法。これらのファイルのそれぞれに対して実行可能ファイルを作成するルールが必要です。以下のような何か:

gcc src.o -o src 
+0

私が望んでいたまさにですFWIW、 HTH http://stackoverflow.com/questions/5950395/makefile-to-compile-multiple-c-programs/13696012#13696012 – Robert

答えて

1

あなたallはちょうどオブジェクトファイルを構築するためにそれを言っています。すべて

EXEC = $(patsubst%.cファイル、%、$(SRCS))のようなものを追加:$(EXEC)

5

rob's答えは私のマシン上で動作するようには思えません。おそらく、完全なMakefileのよう:

SRCS = $(wildcard *.c) 

all: $(SRCS:.c=) 

.c: 
    gcc $(CPFLAGS) $< -o [email protected] 

(デフォルトのルールが適切であるとして最後の2行は、私のマシン上で不要です)

+1

。非常にありがとう。 は「:」を正しく使用できませんでした。 – eduardomoroni

+0

@eduardomoroni:あなたのマクロ 'CPFLAGS'の名前は非標準であることに注意してください。通常は 'CFLAGS'または' CPPFLAGS'またはその両方でなければなりません。 [CFLAGS vs CPPFLAGS](// stackoverflow.com/q/2754966)を参照してください。 –

+0

@eduardomoroni:ところで、この6歳の答えが役に立つと分かったら、おそらくあなたはそれを「受け入れる」べきでしょうか?ありがとうございました。 –

0

次のことを試してみてください。

% : %.c 
    $(CC) $(CFLAGS) $(CPPFLAGS) -o [email protected] $< 
all: $(basename $(wildcard *.c)) 

makeは.cファイルを実行可能ファイルにコンパイルしてリンクする方法を知っているため、最初の2行は必要ありません。それでも、makeのビルトインレシピを変更する必要があることがよくあります。

関連する問題