我试图通过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 $@
提前感谢您的帮助
不需要使用特定于目标的变量。规则依赖性应该足够了:
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 $@
除非您有一些特定的需求没有说明,否则我建议让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等(在命令行或生成文件中),默认规则会选择它们。
如果你使用GNU make,你可以通过运行来查看所有生成的和自动的规则
make -n -p
这是一个很大的输出,所以我建议把它管道到你选择的寻呼机。