【发布时间】:2012-01-22 11:29:04
【问题描述】:
我在这里阅读了几乎所有关于 CUDA、C++ 和 makefile 的问题,但仍然无法解决我的问题。
我的项目的src/ 目录中有一些.cpp 文件和一些.cu 文件(以及.h 和.cuh),我想用makefile 构建我的应用程序。
我尝试过这样做:
SRC_DIR = src
OBJ_DIR = obj
CPP_FILES = $(wildcard $(SRC_DIR)/*.cpp)
CU_FILES = $(wildcard $(SRC_DIR)/*.cu)
H_FILES = $(wildcard $(SRC_DIR)/*.h)
CUH_FILES = $(wildcard $(SRC_DIR)/*.cuh)
OBJ_FILES = $(addprefix $(OBJ_DIR)/,$(notdir $(CPP_FILES:.cpp=.o)))
CUO_FILES = $(addprefix $(OBJ_DIR)/,$(notdir $(CU_FILES:.cu=.cu.o)))
$(TARGET) : $(OBJ_FILES) $(CUO_FILES)
$(LD) $(LDFLAGS) $(LIB_CUDA) -o $@ $?
$(CUO_FILES) : $(CU_FILES) $(CUH_FILES)
$(NVCC) $(NVCCFLAGS) $(INCLUDES) -c -o $@ $<
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp $(H_FILES)
$(NVCC) $(NVCCFLAGS) $(INCLUDES) -c -o $@ $<
在我得到第二个 .cu 文件之前一切正常。 然后我尝试了:
<... previous part stays the same ...>
OBJS = $(patsubst %.cpp,$(OBJ_DIR)/%.o,$(notdir $(CPP_FILES)))
OBJS += $(patsubst %.cu,$(OBJ_DIR)/%.cu.o,$(notdir $(CU_FILES)))
$(TARGET) : $(OBJS)
$(LD) $(LDFLAGS) $(LIB_CUDA) -o $@ $?
$(OBJ_DIR)/%.cu.o : $(SRC_DIR)/%.cu $(CUH_FILES)
$(NVCC) $(NVCCFLAGS) $(INCLUDES) -c -o $@ $<
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp $(H_FILES)
$(NVCC) $(NVCCFLAGS) $(INCLUDES) -c -o $@ $<
但是 make 现在无法弄清楚如何制作任何 .cu.o 文件。
我应该如何修改这个东西来构建我的应用程序?
提前致谢!
Upd - 使用第二个 makefile 的 make 输出:
/usr/local/cuda/bin/nvcc -I/usr/local/cuda/include -c -o obj/main.o src/main.cpp
/usr/local/cuda/bin/nvcc -I/usr/local/cuda/include -c -o obj/util.o src/util.cpp
make: *** No rule to make target `obj/thrust.cu.o', needed by `DCG'. Stop.
项目文件(src/):
- main.cpp
- utils.h
- util.cpp
- thrust.cu
- thrust.cuh
- cuda-utils.cu
- cuda-utils.cuh
【问题讨论】:
-
您似乎在第 5 行没有标签,这是这里还是您的 Makefile 中的拼写错误?
-
我猜这是一个错字。我觉得现在看起来不错。