修改 makefile 列表以插入引号

Modify a makefile list to Insert quotes

在我的 makefile 中,我想更改搜索目录列表...

DIRS := ../project ../project/include ../project/src

类似于以下内容...

INCLUDES := -I"../project" -I"../project/include" -I"../project/src"

我尝试在我的 makefile 中使用以下命令...

INCLUDES := $(patsubst %,-I"%",$(DIRS))

当 makefile 输出列表时,它不包括引号...

INCLUDES = -I../project -I../project/include -I../project/src

但是,当调用编译器时,makefile 使用以下行...

g++ ... -I"../project" -I"../project/include" -I"../project/src"

我不明白。它们为什么不同?

你做得对。正是 Makefile 配方调用的 shell 使引号消失了。考虑 Makefile:

DIRS     := ../project ../project/include ../project/src
INCLUDES := $(patsubst %,-I"%",$(DIRS))

$(info $(INCLUDES))

all:
        @echo $(INCLUDES)

make all returns:

-I"../project" -I"../project/include" -I"../project/src"
-I../project -I../project/include -I../project/src

如您所见,patsubst 文本函数执行得很好。
由于 shell.
的变量扩展,引号消失了 要保留它们,您应该尝试转义它们:

INCLUDES := $(patsubst %,-I\"%\",$(DIRS))

在这种情况下,make all 输出:

-I\"../project\" -I\"../project/include\" -I\"../project/src\"
-I"../project" -I"../project/include" -I"../project/src"