2011-01-13 4 views
2

나는 이것이 누군가에게 분명히 드러나기를 희망한다. 나는 특별한 컴파일이 필요한 메이크 파일을 만들고있다. 나는 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 = %. o)'와 비슷하게'$ (CPP_FILES)'에 대해서'CUDA_FILES : = $ (와일드 카드 * .cu)' –

+0

이다. –

0

다음과 같은보다 현대적인 문자열 대체 함수를 사용하는 것이 좋습니다.

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