我有文件main.c
,version1.c
和version2.c
header.h
version1.c
和version2.c
是同一个头文件 ( 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
吗?还是我只是做错了?我该如何正确地做到这一点?