假设我在makefile.def中有如下内容:
MODLIST = src/main
CPPFLAGS+= -DCFG0=0 -DCFG1=1
cfg0.elf: CPPFLAGS += -DCFG=CFG0
cfg0.elf: $(addprefix $(ODIR)/, $(addsuffix .o, $(MODLIST)))
cfg1.elf: CPPFLAGS += -DCFG=CFG1
cfg1.elf: $(addprefix $(ODIR)/, $(addsuffix .o, $(MODLIST)))
,我们有一个虚拟的main.c,下面是:
#if CFG == CFG0
printf("CFG0");
#elif CFG == CFG1
printf("CFG1");
#endif
问题似乎是由于它们在编译期间被覆盖,(至少是我所想的,但可能是错误的)当两种配置都到达该语句时,它们都打印出相同的"CFG0"在本例中
我有几个想法,但在尝试链接时遇到了问题…
- 在 后缀后面添加一些内容
cfg0。精灵:$ (addprefix (ODIR)/美元,美元(addsuffix_cfg0. o, $ (MODLIST)))
- 在 输出目录中添加一些内容
cfg0。elf: $(addprefix $(ODIR)/CFG0/, $(addsuffix .o, $(MODLIST)))
我试图修改LDFLAGS,但我没有找到一种方法来让它正确编译。我不确定我是否走在正确的方向上,或者是否有更好的方法来处理这样的事情。
当您使用选项-DCFG=xxx
时,如果输出.o
处于相同的位置,请注意,因为:
cfg0.elf
要求所有.o
文件在编译-DCFG0=0
cfg1.elf
需要所有类似的.o
文件,但编译器检测到它已经用-DCFG0=0
编译过了(因为依赖不适用编译器选项)。然后将cfg1.elf
与cfg0.elf
链接到同一个文件中。
你关于Append something to the suffix
或Append something to the output directory
的想法都是正确的方法。实际上,我更喜欢Append something to the output directory
。如果你对链接有问题,我认为你应该针对你的链接问题提出具体的问题。