我已閱讀幾乎所有關於CUDA,C++ & makefiles的問題,但仍無法解決我的問題。用於C++/CUDA項目的makefile
我有一些.cpp
文件&內src/
目錄我的項目的一些.cu
文件(連同.h
& .cuh
),我想我的建立與應用程序生成文件。
我試圖做這種方式:
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 [email protected] $?
$(CUO_FILES) : $(CU_FILES) $(CUH_FILES)
$(NVCC) $(NVCCFLAGS) $(INCLUDES) -c -o [email protected] $<
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp $(H_FILES)
$(NVCC) $(NVCCFLAGS) $(INCLUDES) -c -o [email protected] $<
而且它是確定,直到我有一個第二.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 [email protected] $?
$(OBJ_DIR)/%.cu.o : $(SRC_DIR)/%.cu $(CUH_FILES)
$(NVCC) $(NVCCFLAGS) $(INCLUDES) -c -o [email protected] $<
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp $(H_FILES)
$(NVCC) $(NVCCFLAGS) $(INCLUDES) -c -o [email protected] $<
但使無法弄清楚如何使任何.cu.o
文件的現在。 我應該如何修改這個東西來構建我的應用程序?
在此先感謝!
UPD - 與第二makefile文件做出的輸出:
/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中的拼寫錯誤? –
我想這是一個錯字。我認爲現在看起來很好。 – Eralde