Makefile:转换文件扩展名

时间:2014-10-14 08:17:56

标签: c++ makefile

首先,我想指出我对makefile很新,如果我写了一些愚蠢的东西,那就很抱歉:)

我有一个带有变量名称SRC的makefile,它是我的源文件列表,扩展名为* .cpp。我使用以下指令在目标文件列表(扩展名* .o)中转换此列表:

OBJ = $(SRC:%.cpp=%.o)

现在我想以我的源文件列表包含* .cpp和* .cu文件的方式扩展我的makefile。我希望目标文件列表包含扩展名为* .o的所有文件名。为了实现这一点,我的SRC变量包含* .cpp文件和一个包含* .cu文件的新SRC_cu变量,我执行以下操作:

OBJ = $(SRC:%.cpp=%.o)
OBJ += $(SRC_cu:%.cu=%.o)

这很好用,但是我想知道是否有办法用一条指令做同样的事情,就是说,只有一个带有混合扩展的SRC变量,并说“转换我的所有文件,扩展名为x”或y,到* .o文件“。

2 个答案:

答案 0 :(得分:1)

更通用的选项是:

OBJ := $(addsuffix .o,$(basename $(SRC)))

这会从SRC中的文件名中删除任何类型的后缀,并为每个文件名添加.o

答案 1 :(得分:0)

检查

OBJ := $(SRC:%.cpp=%.o) 
OBJ := $(OBJ:%.cu=%.o)

它只使用一个包含.cpp和.cu文件列表的变量SRC。

虽然这不能放在一行,因为它使用了反复变量OBJ。不要忘记使用:=而不是=,因为OBJ是递归使用的。

由于通配符的行为,您无法在一行中直接调用不同的文件扩展名。虽然你可以有最接近的解决方案