2010-04-09 4 views
25

(Linux Ubuntu 9.10을 실행하고 있으므로 실행 파일의 확장자는 executablefile.out입니다.) C 언어의 모듈 프로그래밍 (여러 파일로 프로그래밍)에 들어가기를 원합니다. 하나의 makefile에서 여러 파일을 컴파일하십시오. 예를 들어,이 파일들을 컴파일하는 메이크 파일은 무엇입니까? main.c, dbAdapter.c, dbAdapter.h? (그런데, 아직 이해하지 못했다면 메인 기능은 main.c에 있습니다.) 또한 메이크 파일의 문서에 대한 링크를 게시 할 수 있습니까?여러개의 C 파일을 make와 함께 컴파일

답변

26

Makefile Tutorial: How To Write A Makefile을 참조하십시오. 이 프로젝트는 (C 및 C++ 소스 파일이 여러 개있는) 그러한 프로젝트를 빌드하고 잘 작동하는 방법을 설명하며 일반적인 함정뿐만 아니라 야생에서 발생하기에는 너무 빈약 한 makefile 관행에 대해 경고하는 잘 만들어진 Makefile을 제공합니다 .

+1

방금 ​​업데이트했으며 피드백을 듣게되어 기쁩니다. –

+2

링크가 현재 죽었습니다. – Pat

+0

@MichaelAaronSafyan 크로스 플랫폼 지원을 목표로하므로 Windows에서 $ (program_name) .exe로 출력 할 때 프로그램 파일을 정리하는 데 필요한 조언이 있습니까? –

32

게시 된 링크는 모두 좋습니다. 특별한 경우에 이것을 시도 할 수 있습니다. 기본적으로 모든 Makefile은이 패턴을 따릅니다. 다른 모든 기능은 바로 가기 및 매크로입니다.

program: main.o dbAdapter.o 
    gcc -o program main.o dbAdapter.o 

main.o: main.c dbAdapter.h 
    gcc -c main.c 

dbAdapter.o dbAdapter.c dbAdapter.h 
    gcc -c dbAdapter.c 

여기서 중요한 점은 Makefile은 규칙을 순차적으로 살펴보고 특정 항목이 필요할 때 빌드된다는 것입니다.

처음에는 프로그램을보고 프로그램을 빌드하는 것을 보게됩니다. main.o와 dbAdapter.o가 필요합니다.

그런 다음 main.o를 찾습니다. 그러나 main.o를 빌드하려면 main.c 및 dbAdapter.h가 필요합니다 (dbAdapter.h는 main.c에 포함되어 있다고 가정합니다).

gcc를 사용하여 main.o를 컴파일하여 소스를 사용합니다. -c는 컴파일 만하려는 것입니다.

dbAdapter.o에서도 동일한 작업을 수행합니다. 두 개의 오브젝트 파일이 있으면 링크 할 준비가 된 것입니다. 이 단계에서도 gcc 컴파일러를 사용합니다. -o는 program이라는 파일을 생성하고 있음을 나타냅니다.

+3

... 컴파일러를 하드 코딩해서는 안되며 미리 정의 된 빌드 규칙을 활용해야합니다 ... 자습서를 참조하십시오. –

+5

물론 당신 말이 맞습니다. 그러나 OP는 Makefiles에 비해 비교적 새로운 것이므로 간접적 인 지시없이 기본 프로세스를 보여 주기만하면됩니다. – aduric

+3

"그러나 OP는 Makefile에 비교적 새로운 기능입니다. 첫 번째 예에서 일반적인 오류를 범하는 것보다는 올바른 경로로 시작해야합니다. – mk12

관련 문제