2013-07-24 5 views
0

UnitTest라는 폴더가 있습니다. 나는 여러 개의 .c 파일을 가지고있다. 모든 파일에는 'main'함수가 있습니다.파일을 여러 실행 파일로 만들기

makefile을 사용하여 해당 폴더의 모든 .c 파일을 함께 컴파일하려고합니다. 그러나이 파일은 다른 폴더에있는 다른 C 파일에 종속됩니다.

어떻게 파일을 만들 수 있습니까?

예 : Common \ *. c - 개체 파일을 생성합니다. App \ *. c - 개체 파일을 생성합니다. - 공용 디렉토리 UnitTest \ .c의 .o 파일을 참조합니다.이 파일은 실행 파일로 컴파일해야합니다. App 및 Common 디렉토리에서 * .o를 참조하십시오.

업데이트 : 헤더 파일은 \라는 별도의 디렉토리에

내가 이것에 대한 하나의 메이크 필요 포함합니다. 도와주세요.

+0

헤더 파일을 사용합니까? 어디있어? – Beta

+0

@Beta, 헤더 파일은 \ Include라는 별도의 디렉토리에 있습니다. – SHRI

+0

그리고'UnitTest /'의 각 파일에 대해'Common /'과'Apps /'에 어떤 파일이 필요한지 알고 있습니까? – Beta

답변

2

표준에 따라 모든 디렉토리에는 하나의 Makefile이 포함됩니다. 따라서 세 개의 디렉토리가 있다면이 작업을위한 세 개의 Makefile을 가질 수 있습니다.

(d) common 
| 
|---(f) common.h 
|---(f) common.c 
|---(f) Makefile --- MAkefile for the common folder. 

(d) app 
| 
|---(f) app.h 
|---(f) app.c 
|---(f) Makefile 

(d) unittest 
| 
|---(f) unittest.h 
|---(f) unittest.c 
|---(f) Makefile 

(f) Makefile --- invoke all makefiles in the mentioned order. 

이러한 모든 일이 일어나기를 원한다면, 그렇게 할 수 있습니다. 여기서 파일의 경로를 제공하여 파일을 컴파일해야합니다. 순서는 가장 무능력하다.

1

이것은 복잡하기 때문에 단계별로 설명하겠습니다. 첫째, 건물 오브젝트 파일 :

CFLAGS += -I/include 

vpath %.h /include 

Common/, Apps/ 또는 UnitTest/에있는 모든 오브젝트 파일을 작성하기에 충분합니다. 추가 테스트를 진행하기 전에 테스트하십시오.

지금 Common/에있는 모든 개체를 구축 :

COMMONSOURCES := $(wildcard Common/*.c) 
COMMONOBJECTS := $(COMMONSOURCES:.c=.o) 

all: $(COMMONOBJECTS) 

시험이 더 가기 전에.

해당 all 규칙을 제거하고 공용 라이브러리에 대한 규칙을 넣습니다. (조금 간단하기 때문에 우리는, 지금은 정적 라이브러리를 사용합니다.)

Common/libCommon.a: $(COMMONOBJECTS) 
    ar -cvq [email protected] $^ 

테스트를 많이, 그것이 어떻게 작동하는지, 우리가 Apps 라이브러리와 UnitTest 실행 파일을 만들 수 있습니다 코멘트에 우리에게있다.

관련 문제