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.
InformationsquelleAutor Eralde | 2012-01-22
Schreibe einen Kommentar