给出以下代码行:
program_OBJS := ${program_SRCS:.cpp=.o}
我想在每个文件名后添加
.o
,而不是用.o
替换.cpp
。如何实现?STRING1:="foo"
STRING2:="bar"
STRING1:=$(STRING1)$(STRING2)
GNU make有一个addsuffix函数。
如果您想要将一些内容追加到以空格分隔的项目列表中,可以使用以下方法:
program_OBJS := $(foreach program,$(program_SRCS),$(program).o)
program_OBJS := $(program_SRCS:.cpp=.cpp.o)
但是为了实现替换,列表必须包含.cpp后缀,否则替换将无法进行。
$(foreach)
会字面上展开第三个参数并连接结果。我刚刚测试了一下,如果省略了空格,它会自动添加一个空格,因此不是必需的。(我将从我的答案中删除该注释并更新自己的Makefile... ;) ) - Veger更简洁的替代方法,使用模式替换:program_OBJS := ${program_SRCS:%=%.o}
另一种不考虑扩展名的工作方式:${program_SRCS:=.o}
仅供猜测 program_OBJS := ${program_SRCS:.cpp=.cpp.o}