下面是我的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 并且我想将目标文件放入此目录中。我该怎么做?
最佳答案
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 $@
关于c++ - 返工 make 文件以将 obj 放入不同的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26052143/