在 Makefile 中有条件地定义变量

标签 c makefile

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

相关文章:

C 程序启动参数

dependencies - 是否可以在 cmake 中包含生成的 make 样式(不是 cmake 样式)依赖项文件?

iphone - 尝试编译 MobileSubstrate 插件 - undefined symbol

c - 将包含零的二进制文件写入 Linux 文件系统

c - 二维数组 Malloc

c - 这些 C 函数有何不同?

c - Cudamalloc 的神秘段错误

makefile - 为ffmpeg编写测试时,如何编写makefile?

c - 这个 Makefile 有什么问题

链接期间 Android NDK undefined reference