GNU Make包含来自目标特定变量的源文件



我试图通过make prog1make 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

这是一个很大的输出,所以我建议把它管道到你选择的寻呼机。

最新更新