我的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 =行之后插入。
有什么想法吗?我想要定义的var是FOO_OTO。只需要定义不设置为任何值。
答案 0 :(得分:1)
您可以使用特定于目标的变量在每个目标的基础上设置变量(假设为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)"
是没用的。这没有任何作用(除了花费你一些表现)。
答案 1 :(得分:0)
如果您有一个变量,其中包含您需要的文件名称,如下所示:
FILES_WITH_FOO_OTO = foo.c bar.c
您可以使用以下构造:
$(CC) -c $(CFLAGS) $(if $(filter $<,$(FILES_WITH_FOO_OTO)), -DFOO_OTO)
这完全改写了我的答案,因为我显然误解了这个问题。