c -在同一源代码上使用不同的预处理器标志编译不同配置的最佳方法是什么?



假设我在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"在本例中

我有几个想法,但在尝试链接时遇到了问题…

  1. 后缀后面添加一些内容

cfg0。精灵:$ (addprefix (ODIR)/美元,美元(addsuffix_cfg0. o, $ (MODLIST)))

  1. 输出目录中添加一些内容

cfg0。elf: $(addprefix $(ODIR)/CFG0/, $(addsuffix .o, $(MODLIST)))

我试图修改LDFLAGS,但我没有找到一种方法来让它正确编译。我不确定我是否走在正确的方向上,或者是否有更好的方法来处理这样的事情。

当您使用选项-DCFG=xxx时,如果输出.o处于相同的位置,请注意,因为:

  • cfg0.elf要求所有.o文件在编译-DCFG0=0
  • cfg1.elf需要所有类似的.o文件,但编译器检测到它已经用-DCFG0=0编译过了(因为依赖不适用编译器选项)。然后将cfg1.elfcfg0.elf链接到同一个文件中。

你关于Append something to the suffixAppend something to the output directory的想法都是正确的方法。实际上,我更喜欢Append something to the output directory。如果你对链接有问题,我认为你应该针对你的链接问题提出具体的问题。

最新更新