私はファイル、、、を持っmain.c
てversion1.c
いversion2.c
ますheader.h
version1.c
とversion2.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
ですか?それとも私はそれを間違っているだけですか?これを正しく行うにはどうすればよいですか?