gpt4 book ai didi

在 Makefile 中有条件地定义变量

转载 作者:行者123 更新时间:2023-11-30 14:19:50 26 4
gpt4 key购买 nike

我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com