makefile für C++/CUDA-Projekt
Gelesen habe ich fast alle Fragen zu CUDA, C++ & makefiles hier, aber kann immer noch nicht herausfinden, die Lösung für mein problem.
Ich habe ein paar .cpp
Dateien & einige .cu
Dateien in src/
- Verzeichnis meines Projektes (zusammen mit .h
& .cuh
), und ich würd gern meine Bewerbung mit einem makefile.
Ich habe versucht, es zu tun auf diese Weise:
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 $@ $<
Und es war OK, bis ich habe eine zweite .cu-Datei.
Und dann habe ich versucht:
<... 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 $@ $<
Aber machen kann nicht herausfinden, wie machen die .cu.o
Dateien jetzt.
Wie sollte ich ändern, dieses Ding zu bauen meine Anwendung?
Vielen Dank im Voraus!
Upd - Ausgabe machen Sie mit dem zweiten 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.
Projekt-Dateien (src/):
- main.cpp
- utils.h
- util.cpp
- Schub.cu
- Schub.cuh
- cuda-utils.cu
- cuda-utils.cuh
- Sie scheinen nicht, um eine Registerkarte auf der Linie 5, ist, dass ein Tippfehler hier oder in Ihrem Makefile?
- Ich denke, es war ein Tippfehler. Ich denke, es sieht jetzt gut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entweder hast du einen syntax-Fehler im Makefile irgendwo Sie werden nicht angezeigt, oder das layout Ihres Projekts ist nicht, wie Sie Sie beschrieben haben. Wenn ich dieses Modell von Ihrem Makefile:
und dann mache ich ein Modell von dem, was Sie beschrieben haben:
und dann Lauf ich machen:
Ich genau das bekommen, was erwartet wird. Also, wenn Sie ein problem haben, es kommt nicht von dem, was du gepostet hast in deine Frage (nach dem mehrere "Schreibfehler" in der ursprünglichen version behoben wurden).