【问题标题】:gnu make: How to concat two stringsgnu make:如何连接两个字符串
【发布时间】:2010-06-21 09:29:21
【问题描述】:

鉴于行:

program_OBJS := ${program_SRCS:.cpp=.o}

我想将.o 附加到每个文件名,而不是用.o 替换.cpp

我该怎么做?

【问题讨论】:

    标签: makefile gnu gnu-make


    【解决方案1】:

    GNU make 有addsuffix 函数

    【讨论】:

    【解决方案2】:

    只是将一些内容添加到您可以使用的空格分隔项目列表中:

    program_OBJS := $(foreach program,$(program_SRCS),$(program).o)
    

    要使用替换方法(就像您在问题中显示的那样):

    program_OBJS := $(program_SRCS:.cpp=.cpp.o)
    

    但为此,列表必须包含 .cpp 就足够了,否则不会发生替换。

    【讨论】:

    • 我认为$(foreach) 确实扩展了第三个参数并将结果连接起来。我刚刚测试了它,如果省略它会自动添加一个空格,所以它不是必需的。 (我将从我的答案中删除注释并更新我自己的 Makefile... ;))
    【解决方案3】:

    较短的替代方案,使用模式替换:program_OBJS := ${program_SRCS:%=%.o}

    【讨论】:

      【解决方案4】:

      这个怎么样:

      STRING1:="foo"
      STRING2:="bar"
      
      STRING1:=$(STRING1)$(STRING2)
      

      显然,您可以将结果保存到新变量中。

      【讨论】:

      • 当我打印这个结果时,我得到 "foo""bar" 作为连接的结果。如何删除不需要的引号?
      • foo := "bar" foo := $(patsubst "%",%,$(foo))
      【解决方案5】:

      另一种与扩展无关的工作方式:${program_SRCS:=.o}

      【讨论】:

        【解决方案6】:

        只是猜测program_OBJS := ${program_SRCS:.cpp=.cpp.o}

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-04
          • 2022-11-16
          • 2013-11-05
          • 2011-08-29
          相关资源
          最近更新 更多