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