【发布时间】:2010-06-21 09:29:21
【问题描述】:
鉴于行:
program_OBJS := ${program_SRCS:.cpp=.o}
我想将.o 附加到每个文件名,而不是用.o 替换.cpp。
我该怎么做?
【问题讨论】:
鉴于行:
program_OBJS := ${program_SRCS:.cpp=.o}
我想将.o 附加到每个文件名,而不是用.o 替换.cpp。
我该怎么做?
【问题讨论】:
GNU make 有addsuffix 函数
【讨论】:
只是将一些内容添加到您可以使用的空格分隔项目列表中:
program_OBJS := $(foreach program,$(program_SRCS),$(program).o)
要使用替换方法(就像您在问题中显示的那样):
program_OBJS := $(program_SRCS:.cpp=.cpp.o)
但为此,列表必须包含 .cpp 就足够了,否则不会发生替换。
【讨论】:
$(foreach) 确实扩展了第三个参数并将结果连接起来。我刚刚测试了它,如果省略它会自动添加一个空格,所以它不是必需的。 (我将从我的答案中删除注释并更新我自己的 Makefile... ;))
较短的替代方案,使用模式替换:program_OBJS := ${program_SRCS:%=%.o}
【讨论】:
这个怎么样:
STRING1:="foo"
STRING2:="bar"
STRING1:=$(STRING1)$(STRING2)
显然,您可以将结果保存到新变量中。
【讨论】:
另一种与扩展无关的工作方式:${program_SRCS:=.o}
【讨论】:
只是猜测program_OBJS := ${program_SRCS:.cpp=.cpp.o}
【讨论】: