修改 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"
在我的 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"