2011-01-13 14 views
2

私はこれが誰かに明らかであることを願っています。私はmakefileを作成しています。これは特別なコンパイルが必要です。私はcudaファイルとC++ファイルをそれぞれ別々にコンパイルする必要があります。私はどのように私は自動的として指定するファイルリストからオブジェクトのリストを生成しないファイルを指定することができ、その後、project1:で行をメークファイルへの依存関係の指定

CUDA_FILES := file1.cu file2.cu file3.cu 
CPP_FILES := file4.cpp file5.cpp 

# lots of options 

#rules: 
all: project1 

project1: file1.o file2.o file3.o file4.o file5.o 
    $(LD) $(LDLIBS) $^ -o [email protected] 

%.o: %.cu 
    $(CUDA) $(CUDA_ARCH) $(CUDA_OPTIONS) $(CUDA_INCLUDES) -Xcompiler "$(COMPILER OPTIONS" $^ -o [email protected] 

の面で最終出力の依存関係を一覧表示したいです依存?

$ cat Makefile 
OBJS = a.o b.o 

foo: a.o b.o 
     $(LD) -o [email protected] $^ 
$ make 
cc -c -o a.o a.c 
cc -c -o b.o b.c 
ld -o foo a.o b.o 

編集

答えて

0
CUDA_FILES := $(wildcard *.cu) 
CC_FILES := $(wildcard *.cpp) 

OBJS := $(CUDA_FILES:.cu=.o) $(CC_FILES:.cc=.o) 
1

ちょうどオブジェクトファイルの代わりに、ソースファイルを一覧表示しますが、この方法に従うことをしたくない場合は、string substitution使用:

OBJS = $(CUDA_FILES:%.cu=%.o) $(CPP_FILES:%.cpp=%.o) 
+0

ワイルドカードでファイルを検索するとどうなりますか?オブジェクトファイルが出力されません。 $ CUDA_FILES:= $(ワイルドカード* .cu) ' –

+0

' $(CUDA_FILES:%.cur =%.o) 'と同様に' $(CPP_FILES) 'と同じです。 –

0

より現代的な文字列置換関数を使用することをお勧めします。

dogCpp := dog.cpp dogSays.cpp 
dogObj := $(patsubst %.cpp,%.o,${dogCpp})