makefile - 在 GNU Make 中创建逗号分隔的列表

标签 makefile gnu-make

我有一个带有一组 bool 值的 Makefile,它必须用于控制外部应用程序的标志。问题是标志必须作为逗号分隔的字符串传递。

像这样的东西(非工作伪代码):

WITH_LIST = ""
WITHOUT_LIST = ""

ifeq ($(BOOL_A),y)
    # Append A to list "WITH_LIST"
else
    # Append A to list "WITHOUT_LIST"
endif

ifeq ($(BOOL_B),y)
    # Append B to list "WITH_LIST"
else
    # Append B to list "WITHOUT_LIST"
endif

ifeq ($(BOOL_C),y)
    # Append C to list "WITH_LIST"
else
    # Append C to list "WITHOUT_LIST"
endif

现在假设 BOOL_A == y、BOOL_B == n 和 BOOL_C == y,我需要运行以下命令:
./app --with=A,C --with-out=B

如何使用 Gnu Make 生成这些字符串?

最佳答案

首先,使用您的方法或 thiton 的方法创建两个空格分隔的列表。
然后你使用 section 6.2 of the GNU make manual 末尾的小技巧创建一个包含单个空格的变量和一个包含逗号的变量。然后您可以在 $(subst ...) 中使用这些将两个列表更改为逗号分隔。

零件:= A B C

BOOL_A := 是
BOOL_B := n
BOOL_C := 是

WITH_LIST := $(foreach part, $(PARTS), $(if $(filter y, $(BOOL_$(part))), $(part)))
WITHOUT_LIST := $(过滤掉 $(WITH_LIST), $(PARTS))

空:=
空间 := $(null) #
逗号 := ,

WITH_LIST := $(subst $(space),$(comma),$(strip $(WITH_LIST)))
WITHOUT_LIST := $(subst $(space),$(comma),$(strip $(WITHOUT_LIST)))

全部:
./app --with=$(WITH_LIST) --with-out=$(WITHOUT_LIST)

关于makefile - 在 GNU Make 中创建逗号分隔的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7525589/

相关文章:

C++ 未定义对库函数的引用

makefile - 判断 make 是在 windows 还是 linux 上运行

makefile - 查找:路径必须先于表达式: `1'

Makefile:配方中模式规则%的重用值

仅当其依赖项实际更改时才重新编译的 Makefile

c++ - 在代码中访问 Makefile 变量?

makefile,处理多个文件

build - 如何从源代码安装Docker?

c - MSYS make.exe 命令不会执行任何操作 ("Nothing to be done for...")

c - 如何使用 Eclipse 将额外的源代码添加到导入的现有 makefile 项目中?