2012-01-22 24 views
3

ここでは、CUDA、C++ &メイクファイルに関するほとんどすべての質問を読んだことがありますが、それでも私の問題を解決することはできません。C++/CUDAプロジェクトのメイクファイル

私はいくつかの.cppファイル&(.h & .cuhと一緒に)私のプロジェクトのsrc/ディレクトリ内のいくつかの.cuのファイルを持っている、と私はメイクで自分のアプリケーションを構築したいと思います。

私は、このようにそれを行うことを試みた:

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ファイルを持ってまで、それはOKでした。 そして私が試した:

<... 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は - 2番目のメイクファイルを作るの出力:

/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
+0

5行目にタブが表示されていないようですが、ここに入力されたのか、それともあなたのMakefileにありますか? –

+0

私はそれがタイプミスだったと思う。今は大丈夫だと思います。 – Eralde

答えて

4

あなたが表示されない、またはプロジェクトのレイアウトではないどこかのMakefileに構文エラーがありますどちらかあなたが説明したように。私はあなたのMakefileのこのモデル取る場合:

TARGET = nothing 
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=. 

OBJS = $(patsubst %.cpp,$(OBJ_DIR)/%.o,$(notdir $(CPP_FILES))) 
OBJS += $(patsubst %.cu,$(OBJ_DIR)/%.cu.o,$(notdir $(CU_FILES))) 

$(TARGET) : $(OBJS) 
    echo "linking rule : " -o [email protected] $? 

$(OBJ_DIR)/%.cu.o : $(SRC_DIR)/%.cu $(CUH_FILES) 
    echo ".cu.o rule : " [email protected] $< 
    touch [email protected] 

$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp $(H_FILES) 
    echo ".o rule : " [email protected] $< 
    touch [email protected] 

をして、私はあなたが説明したもののモデルを作る:

$ mkdir src 
$ mkdir obj 
$ touch src/main.cpp 
$ touch src/cuda-utils.cuh 
$ touch src/thrust.cu 
$ touch src/cuda-utils.cu 
$ touch src/util.cpp 
$ touch src/main.cpp 

$ ls 
Makefile obj  src 

$ ls src 
cuda-utils.cu cuda-utils.cuh main.cpp thrust.cu util.cpp 

$ ls obj 

、その後、私はmakeを実行:

$ make 
echo ".o rule : " obj/main.o src/main.cpp 
.o rule : obj/main.o src/main.cpp 
touch obj/main.o 
echo ".o rule : " obj/util.o src/util.cpp 
.o rule : obj/util.o src/util.cpp 
touch obj/util.o 
echo ".cu.o rule : " obj/cuda-utils.cu.o src/cuda-utils.cu 
.cu.o rule : obj/cuda-utils.cu.o src/cuda-utils.cu 
touch obj/cuda-utils.cu.o 
echo ".cu.o rule : " obj/thrust.cu.o src/thrust.cu 
.cu.o rule : obj/thrust.cu.o src/thrust.cu 
touch obj/thrust.cu.o 
echo "linking rule : " -o nothing obj/main.o obj/util.o obj/cuda-utils.cu.o obj/thrust.cu.o 
linking rule : -o nothing obj/main.o obj/util.o obj/cuda-utils.cu.o obj/thrust.cu.o 

$ ls obj 
cuda-utils.cu.o main.o  thrust.cu.o util.o 

私が手正確に何が期待されている。だからあなたが問題を抱えている場合は、あなたの質問に投稿したものから来ていません(元のバージョンのいくつかの "タイプミス"が修正された後)。

+0

あなたはそうだった - それは "cu.o"の前のドットだった。あなたの努力のためにありがとうございます。 – Eralde

+0

投稿する前に私の質問を再確認します... – Eralde

関連する問題