下面是我的makefile
# Location of the CUDA Toolkit
CUDA_PATH ?= /usr/local/cuda-6.0
NVCC := $(CUDA_PATH)/bin/nvcc -ccbin g++
APP := app
OBJ := obj
source_files = $(shell find ./src -type f -regex '.*\.\(c\|cu\|cpp\)' | sed 's/^\.\/src\///')
obj_files = $(patsubst .c,obj/.o,$(patsubst .cpp,obj/.o,$(patsubst .cu,obj/.o,$(source_files))))
vpath %.c ./src/
vpath %.cpp ./src/
vpath %.cu ./src/
# Target rules
all: exe
%.o: %.cu
-mkdir -p $(dir $@)
$(NVCC) $+ -c -o $@
exe: $(obj_files)
$(NVCC) $^ -o $(APP)
run: exe
./$(APP)
clean:
rm -f $(APP) obj/*.o
clobber: clean
我有两个问题:
1)如何让makefile与cpp,c和cu文件一起使用 现在,我有
%.o: %.cu
-mkdir -p $(dir $@)
$(NVCC) $+ -c -o $@
但是,我想要那样的东西
%.o: %.cu, %.cpp, %.c
-mkdir -p $(dir $@)
$(NVCC) $+ -c -o $@
2)我如何将obj放入不同的位置。在我的makefile中,我有变量$(OBJ)= obj,我想把目标文件放到这个目录中。我怎么能这样做?
答案 0 :(得分:1)
1)您需要三个单独的规则。 2)这并不困难,但是如果目标的名称不是规则实际产生的,那么你可能会遇到麻烦,所以拼出来。
我不习惯使用cuda代码,所以我假设您的配方可以使用C或C ++代码编写。
$(OBJ)/%.o: %.cu
-mkdir -p $(dir $@)
$(NVCC) $+ -c -o $@
$(OBJ)/%.o: %.cpp
-mkdir -p $(dir $@)
$(NVCC) $+ -c -o $@
$(OBJ)/%.o: %.c
-mkdir -p $(dir $@)
$(NVCC) $+ -c -o $@