2011-01-13 4 views
2

Я надеюсь, что это очевидно для кого-то там. Я создаю make-файл, для которого мне нужна специальная компиляция. У меня есть файлы cuda и файлы C++, которые необходимо скомпилировать отдельно. Я хочу, чтобы иметь возможность указать файл, а затем список зависимостей для окончательного вывода с точки зренияЗадание зависимостей от make-файла

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] 

для линии с project1: как я автоматически генерировать список объектов из списков файлов, чтобы указать, как зависимость?

ответ

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

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

Просто список объектных файлов вместо исходных файлов:

$ 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 

Редактировать: Если вы не хотите, чтобы следовать этому методу, используйте string substitution:

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

что делать, если я использую групповой поиск файлов? объектные файлы не появятся. 'CUDA_FILES: = $ (wildcard * .cu)' –

+0

'$ (CUDA_FILES:%. Cu =%. O)' и аналогично для '$ (CPP_FILES)'. –

0

Я бы предложил использовать более современные функции замены строк, например:

dogCpp := dog.cpp dogSays.cpp 
dogObj := $(patsubst %.cpp,%.o,${dogCpp}) 
Смежные вопросы