2010-06-21 27 views

回答

5

只是一些東西附加到空間分隔的項目列表,你可以使用:

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

要使用替代方法(如你在你的問題顯示):

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

但該列表必須包含的.cpp足夠了,或者替換不會發生。

+0

爲什麼太空問題? – 2010-06-21 09:50:15

+0

我以爲'$(foreach)'從字面上消耗了第三個參數並連接了結果。我只是測試它,它會自動添加一個空格,如果省略,所以它不是必需的。 (我會從我的答案中刪除註釋並更新我自己的Makefiles ...;)) – Veger 2010-06-21 10:18:02

1

只是一個猜測program_OBJS := ${program_SRCS:.cpp=.cpp.o}

8

GNU make也有addsuffix功能

+0

+1這是否可以在其他版本的make中工作,或者只是gnu make? – 2010-06-21 14:57:01

+1

@Robert:就是GNU make。如果你想要使用Makefiles保持便攜性,最好的辦法是編寫POSIX makefiles,如下所示:http://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html – Jens 2011-08-27 15:49:07

5

較短的替代,使用模式替換:program_OBJS := ${program_SRCS:%=%.o}

3

另一種方式的擴展,無論工作:${program_SRCS:=.o}

1

如何:

STRING1:="foo" 
STRING2:="bar" 

STRING1:=$(STRING1)$(STRING2) 

顯然,你可以將結果保存到一個新變量中。