我的 Makefile 中有一个标签,如下所示:
%.o: %.c
CFLAGS="$(CFLAGS)"
$(CC) -c $(CFLAGS) $(STACK_OPTS) $(SIO_FLAGS) $(IO_FLAGS) $(LOCAL_INCLUDES) $(OAK_FLAGS) -DSYNC_WRITE $(OAK_LIBS) $<
$(CC) -MM $(CFLAGS) $(OAK_FLAGS) $(LOCAL_INCLUDES) $^ > $*.d
@cp -f $*.d $*.d.tmp
@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | \
sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
@rm -f $*.d.tmp
我需要有条件地为一组 .c 源文件添加另一个定义变量,并仅为这些文件设置它。可以吗?我认为它将被插入到 CFLAGS= 行之后。
有什么想法吗?我想定义的变量是FOO_OTO。只需要定义而不是设置为任何值。
最佳答案
您可以使用特定于目标的变量在每个目标的基础上设置变量(假设是 GNU make)。因此,如果您在 FOO_SRC
中有一个源文件列表,并且想要向其中添加一些额外的标志,您可以执行以下操作:
EXTRA_CFLAGS =
FOO_SRC = foo.c bar.c baz.c
$(FOO_SRC:.c=.o): EXTRA_CFLAGS = -DEXTRA
然后将 $(EXTRA_CFLAGS)
添加到您的编译规则中。顺便说一句,在您的规则中添加 CFLAGS="$(CFLAGS)"
是没有用的。这没有任何作用(除了会降低你的性能)。
关于在 Makefile 中有条件地定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21709279/