2011-01-13 24 views
2

Ich hoffe, dass dies für jemanden da draußen offensichtlich ist. Ich erstelle ein Makefile, für das ich eine spezielle Zusammenstellung benötige. Ich habe Cuda-Dateien und C++ - Dateien müssen jeweils separat kompiliert werden. Ich mag die Datei in der Lage sein, zu spezifizieren und dann die Abhängigkeiten in Bezug auf dieAngeben von Abhängigkeiten von Makefile

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] 

für die Linie für die endgültige Ausgabe Liste mit project1: wie kann ich die Objektliste aus den Dateien Listen als angeben automatisch generieren Abhängigkeit?

Antwort

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

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

Nur Liste die Objektdateien statt die Quelldateien:

$ 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 

bearbeiten: Wenn Sie wollen, diese Methode nicht folgen, verwenden string substitution:

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

Was ist, wenn ich eine Platzhaltersuche für die Dateien verwende? Objektdateien werden nicht angezeigt. 'CUDA_FILES: = $ (Platzhalter * .cu)' –

+0

'$ (CUDA_FILES:% .cu =% .o)' und ähnlich für '$ (CPP_FILES)'. –

0

Ich würde vorschlagen, die moderneren Stringsubstitutionsfunktionen zu verwenden, wie:

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