首先,我想指出我对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文件“。
答案 0 :(得分:1)
更通用的选项是:
OBJ := $(addsuffix .o,$(basename $(SRC)))
这会从SRC
中的文件名中删除任何类型的后缀,并为每个文件名添加.o
。
答案 1 :(得分:0)
检查
OBJ := $(SRC:%.cpp=%.o)
OBJ := $(OBJ:%.cu=%.o)
它只使用一个包含.cpp和.cu文件列表的变量SRC。
虽然这不能放在一行,因为它使用了反复变量OBJ。不要忘记使用:=
而不是=
,因为OBJ
是递归使用的。
由于通配符的行为,您无法在一行中直接调用不同的文件扩展名。虽然你可以有最接近的解决方案