我尝试用make prog1
或make prog2
构建两个带有一个GNU Makefile的程序。我尝试使用特定于目标的变量来指定目标独有的源文件,但是已经构建了test1.c和test2.c.它们仅在链接可执行文件时引用。如何让Makefile编译test1.c或test2.c?
以下是我的Makefile的摘录:
...
prog1: PASRC = test1.c
prog2: PASRC = test2.c
...
ASRC = $(PASRC) common.c
...
OBJS = $(ASRC:.c=.o)
...
prog1: $(OBJS) prog1.elf
prog2: $(OBJS) prog2.elf
...
%elf: $(OBJS)
$(CC) $(OBJS) $(LDFLAGS) $(LIBS) -o $@
提前感谢您的帮助
答案 0 :(得分:2)
无需使用目标特定变量。常规依赖应该足够了:
all : prog1 prog2 # default target
prog1 : test1.o
prog2 : test2.o
prog1 prog2 : common.o
%.o : %.c # how to build any .o from a corresponding .c
$(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $<
prog1 prog2 : % :
$(CC) $^ $(LDFLAGS) $(LDLIBS) -o $@
答案 1 :(得分:0)
除非你有某些你没有说明的具体要求,否则我建议让make为你做的工作(默认规则和标志)。
PROGS = prog1 prog2
COMMON_OBJS = common.o
all: $(PROGS)
prog1 prog2: % : %.o $(COMMON_OBJS)
clean:
rm -f $(PROGS) $(PROGS:%=%.o) $(COMMON_OBJS)
你仍然可以设置CLFAGS,LDFLAGS等(在命令行或makefile中),默认规则会选择它们。
如果您使用的是GNU make,则可以通过运行以下命令查看所有生成和自动规则:
make -n -p
这是很多输出,所以我建议将它用于你选择的寻呼机。