2012-04-14 2 views
2

소스 코드 파일이 서로 다른 디렉토리에있을 때 Makefile 작성에 어려움이 있습니다. 폴더 이름을 지정하는 폴더 FOLDER1 및 FOLDER2와 헤더 파일에다른 디렉토리에있는 소스 파일을위한 makefile 작성

내 소스 파일 (.CC)가 다음을 포함한다 : 다음과 같이

디렉토리 구조입니다. 내 makefile이 FOLDER1에 있습니다. 여기

 program_NAME := myprogram 
     program_C_SRCS := $(wildcard *.cc) 
     program_C_OBJS := ${program_C_SRCS:.cc=.o} 
     program_OBJS := $(program_C_OBJS) 
     program_INCLUDE_DIRS := ../INCLUDE 
     program_LIBRARY_DIRS := 
     program_LIBRARIES := 
     CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir)) 
     LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir)) 
     LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library)) 

     .PHONY: all clean distclean 

     all: $(program_NAME) 

     $(program_NAME): $(program_OBJS) 
     $(LINK.cc) $(program_OBJS) -o $(program_NAME) 

     clean: 
      @- $(RM) $(program_NAME) 
      @- $(RM) $(program_OBJS) 

     distclean: clean 

는 그때 그것이 정의되지 않은 참조의 오류를 제공 FOLDER2 일부 파일을 이동에 있지만 작동 FOLDER1에 내 모든 소스 (.CC) 파일을 유지합니다.

하나의 디렉토리에있는 모든 헤더 파일을 INCLUDE라고 말하고 다른 디렉토리에 내 소스 파일을 배포 할 수 있도록 makefile을 수정하는 방법을 알려주십시오.

감사합니다 !!!

답변

2

문제는, 그

program_C_SRCS := $(wildcard *.cc) 

은 같은 디렉토리에 소스 파일을 추가합니다. 따라서 링크 할 때 두 번째 폴더의 오브젝트 파일이 없습니다. 당신은 아마 단순히 program_C_SRCS에 다른 폴더의 소스 파일을 추가하여 문제를 해결할 수 있습니다 :

program_C_SRCS += $(wildcard ../FOLDER2/*.cc) 

directorys를 포함 난 당신이이 /가 ++,이 경우 http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html 말한다 g gcc를 사용하는 것 같아요 헤더 경로는 왼쪽에서 오른쪽으로 검색됩니다. 즉, 첫 번째 경로가 먼저 검색됩니다. 따라서 -I INCLUDE1 옵션 앞에 -I INCLUDE2 옵션을 추가하기 만하면됩니다. 그래서 당신은 당신의 경로를 포함 다시 작성해야

CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir)) 

: 귀하의 시작 메이크는 이미 더 후 하나의 경로 빌드를 포함에 대한 몇 가지 변화를 가지고

program_INCLUDE_DIRS := ../INCLUDE2 
program_INCLUDE_DIRS += ../INCLUDE1 
+0

@Haatschii을 .... 감사합니다! 그 지금 일하고있어. –

+0

나는 의심이 하나 더 있습니다 ... 헤더 파일에 2 개의 디렉토리가 있다면 INCLUDE1과 INCLUDE2라고 말하십시오. 헤더 파일이 INCLUDE1과 INCLUDE2에 있다면 INCLUDE2에서 가져와야하며 INCLUDE2에없는 경우 INCLUDE1 자체에서 헤더 파일을 가져와야합니다. 위의 파일을 수정하여 도움을 받으십시오. –

+0

my @KundanKumar에 답하십시오. – Haatschii

관련 문제