【问题标题】:Modify a makefile list to Insert quotes修改生成文件列表以插入引号
【发布时间】:2015-10-02 08:54:27
【问题描述】:

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

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

【问题讨论】:

    标签: shell makefile quotes


    【解决方案1】:

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

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

    make all 返回:

    -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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多