web-dev-qa-db-ja.com

ディレクトリ内のすべてのCファイルを個別のプログラムにコンパイルします

GNUディレクトリ内のすべてのCファイルを個別のプログラムにコンパイルし、各プログラムに.c拡張子のないソースファイルとして名前を付ける方法はありますか?

28
SRCS = $(wildcard *.c)

PROGS = $(patsubst %.c,%,$(SRCS))

all: $(PROGS)

%: %.c

        $(CC) $(CFLAGS)  -o $@ $<
47

私はあなたがメイクファイルさえ必要とは思わない-デフォルトの暗黙のメイクルールはそれをするべきである:

$ ls
src0.c  src1.c  src2.c  src3.c
$ make `basename -s .c *`
cc     src0.c   -o src0
cc     src1.c   -o src1
cc     src2.c   -o src2
cc     src3.c   -o src3

コマンドラインを少し簡単にするために編集されました。

7
Carl Norum
SRCS = $(wildcard *.c)

PROGS = $(patsubst %.c,%,$(SRCS))

all: $(PROGS)

%: %.c
        $(CC) $(CFLAGS) -o $@ $<
clean: 
        rm -f $(PROGS)

「クリーンな」ターゲットを追加することにより、MartinBroadhurstの回答を改善します。 「makeclean」はすべての実行可能ファイルをクリーンアップします。

6
Pratik