목숨걸고 시작하는 리눅스 시스템 프로그래밍 – 4

 

안녕하세요, 저는 길당 홍길한이라 합니다.
오늘은 전의 내용에 이어서

글을 작성합니다.

make는 makefile이라는 특수 형식에 저장한 일련의 과정을 근거로 최신
버전으로 개정합니다.

CC = gcc # Compiler to use
OPTIONS = -O2 -g -Wall # -g for debug, -O2 for optimise and -Wall additional messages
INCLUDES = -I . # Directory for header file
OBJS = main.o module.o # List of objects to be build
.PHONY: all clean # To declare all, clean are not files
 
all: ${OBJS}
  @echo "Building.." # To print "Building.." message
  ${CC} ${OPTIONS} ${INCLUDES} ${OBJS} -o target_bin
 
%.o: %.c  # % pattern wildcard matching
  ${CC} ${OPTIONS} -c $*.c ${INCLUDES}
list:
  @echo $(shell ls) # To print output of command 'ls'
 
clean:
  @echo "Cleaning up.."
  -rm -rf *.o # - prefix for ignoring errors and continue execution
  -rm target_bin

위의 코드는 전에 작성했던 Makefile 의 실제 코드 모습입니다.

Makefile을 작성하실 때에는,
all : ${OBJS
다음에 보시는 것처럼,

반드시 [tab] 키를 써서 들여 쓰기를 하셔야 인식합니다.
이렇게 해서 완성된 코드를 작성하신 다음에는,

터미널  상에서 make라는 명령어를 사용하시면,
자동으로 컴파일이 이루어지는 것을 보실 수 있습니다.

 

gildang@gildang-P5Q ~/alsp_3rd/dd $ make
gcc  -O2 -g -Wall  -c main.c -I . 
gcc  -O2 -g -Wall  -c module.c -I . 
Building..
gcc  -O2 -g -Wall  -I .  main.o module.o  -o target_bin

컴파일이란 말 대신 빌드라는 말도 사용되는데,
오늘은 빌드에 대해서 알아 보기로 합니다.

흔히 gcc 자체를 컴파일러 내지 컴파일 도구라고 알고 있습니다.
그러나 우분투 계열 등에서는 사실은 gcc는 C 컴파일러가 아니라 빌드 과정을 차레로 실행하는
명령어라고 아시고 계시면 됩니다.

즉, 전처리기를 호출하고 컴파일러를 호출하고 어셈블러를 호출하고 링커를 호출하는 일을 합니다.

그렇기에 컴파일러 드라이버라고 부르고 있습니다.
그리고 빌드란, 전처리와 컴파일+어셈블리와 링킹 과정을 합한 것입니다.

우선, 많은 정보를 대하게 될 것이기에,
이론은 이쯤에서 끝내고,

C 언어에 대해서 들어가 보기로 합니다.

다음의 간단한 코드를 작성해 보기로 합니다.

//gildang.c
#include<stdio.h>
int main(){
  printf("gildang\n");
}

이 코드는 터미널에서
vim gildang.c 라고  하고 나서
내용을 작성해 보기로 하고 파일로 저장합니다.

여기서 보시면,

#include <stdio.h>

라는 문장이 보이는데, 이것을 전처리기라고도 합니다.

아래의 내용은 이곳에 자세히 작성되어 있습니다.

http://sarghis.com/blog/802/

————————————————————————————————–

전처리문이란?

실질적인 컴파일 이전에 미리 처리되는 문장을 가리킨다. 선행처리기라고도 한다.
따라서 컴파일러는 사용자가 작성한 코드를 컴파일하기 전에 전처리문에서 정의해 놓은 작업들을 먼저 수행한다.

종류로는 #define, #if, #ifdef, #ifndef, #defined, #undef 등이 있다. 이것은 기존에 있는 방대한 소스 코드를 지우지 않고 활성화 비활성화 하는 데에 가장 많이 이용된다.
즉, 기존에 있는 소스 코드를 건드리지 않는 상태에서 부분적인 컴파일을 하는 것이다.
C의 전처리문이 오는 줄(Line)의 첫 문자는 항상 ‘#’으로 시작한다. ANSI 표준에 따른 C의 전처리문의 종류가 아래에 나와 있다.

파일 처리를 위한 전처리문 : #include
형태 정의를 위한 전처리문 : #define, #undef
조건 처리를 위한 전처리문 : #if, #ifdef, #ifndef, #else, #elif, #endif
에러 처리를 위한 전처리문 : #error
디버깅을 위한 전처리문 : #line
컴파일 옵션 처리를 위한 전처리문 : #pragma

 


 

#include <stdio.h>는 stdio.h라는 라이브러리 파일을 찾아 처리를 호출하여 처리를
한다는 것으로 이해하셔도 무방합니다.

이제 C 언어를 시작하면서 리눅스의 세계로도 본격적으로 뛰어들게
될텐데, 이 문서 외에도 실제로 직접 많은 책을 정독하시는 것을
마음 속에 다짐을 하고 리눅스 프로그래밍을 부지런히 공부하셔야
좋은 성과를 기대할 수 있을 것입니다.

감사합니다.. ^^

 

 

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.