我希望这对那里的人来说是显而易见的。我正在创建一个makefile,我需要一些特殊的编译。我有cuda文件和c ++文件,每个都需要单独编译。我希望能够指定文件,然后根据
列出最终输出的依赖关系CUDA_FILES := file1.cu file2.cu file3.cu
CPP_FILES := file4.cpp file5.cpp
# lots of options
#rules:
all: project1
project1: file1.o file2.o file3.o file4.o file5.o
$(LD) $(LDLIBS) $^ -o $@
%.o: %.cu
$(CUDA) $(CUDA_ARCH) $(CUDA_OPTIONS) $(CUDA_INCLUDES) -Xcompiler "$(COMPILER OPTIONS" $^ -o $@
对于project1:
行,如何从文件列表中自动生成对象列表以指定为依赖项?
答案 0 :(得分:1)
只列出目标文件而不是源文件:
$ cat Makefile
OBJS = a.o b.o
foo: a.o b.o
$(LD) -o $@ $^
$ make
cc -c -o a.o a.c
cc -c -o b.o b.c
ld -o foo a.o b.o
修改:如果您不想使用此方法,请使用string substitution:
OBJS = $(CUDA_FILES:%.cu=%.o) $(CPP_FILES:%.cpp=%.o)
答案 1 :(得分:0)
CUDA_FILES := $(wildcard *.cu)
CC_FILES := $(wildcard *.cpp)
OBJS := $(CUDA_FILES:.cu=.o) $(CC_FILES:.cc=.o)
答案 2 :(得分:0)
我建议使用更现代的字符串替换函数,例如:
dogCpp := dog.cpp dogSays.cpp
dogObj := $(patsubst %.cpp,%.o,${dogCpp})