0

私はファイル、、、を持っmain.cversion1.cversion2.cますheader.h

version1.cversion2.cは同じヘッダーファイル()の2つの異なる実装でありheader.h、このヘッダーファイルは。によって使用されmain.cます。

今、私はしたい

$ make v1
cc -c main.c
cc -c version1.c
cc -o prog main.o version1.o

また

$ make v2
cc -c main.c
cc -c version2.c
cc -o prog main.o version2.o

使用しているコードのバージョンによって異なります。

Makefileターゲット内の変数に条件付きで追加してみて、次のように記述しました。

.PHONY: v1 v2
OBJ = main.o
v1: OBJ += version1.o
v2: OBJ += version2.o
v1 v2: prog
prog: $(OBJ)
     cc -o prog $(OBJ)
%.o: %.c header.h
     cc -c $<

しかし、これはまったく機能しません。

$ make v1
cc -c main.c
cc -o prog main.o version1.o
cc: version1.o: No such file or directory
make: *** [prog] Error 1

依存関係リストに表示される場合は追加makeに評価されますが、コマンドリストに表示される場合は追加に評価されるようです。$(OBJ)

これはバグmakeですか?それとも私はそれを間違っているだけですか?これを正しく行うにはどうすればよいですか?

4

1 に答える 1

1

変数()のターゲット固有の変更はv1: OBJ += version1.o、前提条件リストではなく、ルールの本体に適用されます。これが私がそれをする方法です:

.PHONY: v1 v2
v1: version1.o
v2: version2.o
v1 v2: main.o
    cc -o prog $^

%.o: %.c header.h
    cc -c $<
于 2012-06-29T11:31:43.360 に答える