작은항해자의 항해

C 프로그래밍1 본문

Programming/프로그래밍공부중

C 프로그래밍1

작은항해자 2014. 10. 1. 15:29

C 프로그램의 빌드


소스 코드의 빌드 과정

1. 프리프로세서에 의한 파일 포함과 매크로 처리

2. 어셈블리 코드로 컴파일하고 어셈블 과정을 거쳐 오브젝트 파일로 변환

3. 오브젝트 파일 결합과 라이브러리 링크


-o options : 실행파일 이름 지정

-c options : 오브젝트 파일까지 생성

-s options : 어셈블리 파일까지 생성


프로그램의 구조화

 프로그램 전체를 각각의 파일로 나누면 프로그램 전체의 구성을 파악하기 쉬워진다. 또한 기능 별로 모아 디렉터리로 나누거나 다시 서브디렉터리로 나누면 프로그램을 더욱 명확하게 구조화 할 수 있다.


빌드 자동화

적절한 옵션이나 인수를 주고 명령을 순차적으로 실행하면 빌드 과정을 자동화 할 수 있다.


make

make는 각 파일 사이의 의존성을 파악하고 파일의 타임스탬프를 비교해 다시 생성할 필요가 있는지 판단하는 기능이 있다.

c 프로그램의 분할 컴파일에서 생성된 오브젝트 파일은 각각의 소스 파일에 의존한다. 또한, 오브젝트 파일을 링크해서 만든 실행 파일은 각각의 오브젝트 파일에 의존한다. make는 이런 관계를 이해하고 부분적인 수정이 가해졌을때 최소한의 처리만으로 전체의 적합성을 유지하는 도구이다.


Makefile

'소스 데이터로부터 결과물이 만들어진다'는 규칙을 파일에 작성해 두면 make는 파일을 해석해 순차적으로 처리한다. 이 규칙을 작성한 파일을 'makefile'이라고 하고 기본 메이크파일의 이름은 Makefile이다.

make -f filename처럼 -f 옵션을 주고 이름을 지정하면 다른 이름으로 메이크파일을 지정할 수 도 있다.


메이크파일에는 결과물과 소스 데이터와의 관계를 '결과물: 소스 데이터'처럼 콜론(:)으로 연결해 작성한다. 하나의 결과물에 어러 개의 소스 데이터를 연결할 수 있다. 다음 줄에는 변환 수단을 작성한다. 터미널에 입력해야 하는 명령 또는 배치 파일에 기재한 명령을 작성한다. 명령은 반드시 'tab'으로 들여 쓰기해서 작성해야 한다. 스페이스로 들여 쓰기하면 바르게 동작하지 않는다.


Makefile 내부 매크로


내부 매크로

 설명

 $@

 매크로로 만들어질 타깃 파일명

 $^

 모든 의존 파일을 스페이스로 구분한 목록(중복 제외)

 $+

 모든 의존 파일을 스페이스로 구분한 목록(중복 포함)

 $?

 타깃보다 새로운 의존 파일만 스페이스로 구분한 목록

 $<

 의존 파일 중 첫 번째 기술된 파일명(확장자 규칙에만 사용)

 $*

 현재 타깃 파일명에서 확장자를 뺀 이름(확장자 규칙에만 사용)


make는 암묵적인 규칙에 따라 c 프로그램 소스 코드를 오브젝트 코드로 변환하는 방법을 알고 있다. c 소스 코드가 있을 때 $(CC)로 컴파일하고 파일 확장자를 .o로 치환한 오브젝트 코드를 만든다는 규칙을 다시 작성할 필요는 없다.


make에는 암묵적인 규칙의 추가, 더미 타깃, 명령 삽입 등 그 밖에도 다양한 기능이 있다. 자주 이용되는 기능은 Dummy target이다. 보통 타깃과 달리 더미 타깃은 의존하는 파일이 없고 타깃 파일로 생성되지 않는다. make를 실행할 때 타깃을 지정할 수 있는 점을 이용해 따로 처리하고자 하는 명령을 더미 타깃으로 작성하는 방법을 자주 이용한다.

더미 타깃으로 하는 일은 시스템에 설치하는 작업과 작업 파일 제거 등이 대표적이다. 각기 make install, make clean이란 명령으로 처리한다.



'Programming > 프로그래밍공부중' 카테고리의 다른 글

MQTT  (0) 2019.01.16
프로그램의 이식성  (0) 2014.10.01