makefile을 분석하기 위해서는 먼저 gcc 컴파일에 대한 이해가 필요하다.
1. 기본동작
execute파일을 생성한다.
==== 소스코드 ====
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Hellow World\n");
return 0;
}
==== 실행 예제 ====
$ gcc test.c
$./a.out
Hellow World
==== 이론 ====
1. 전처리 단계 - 전처리기 (cpp)
: #include, #define 등 #으로 시작하는 문법 사항이 적절히 전처리된 C 언어 소스파일 생성
2. 컴파일 단계 - 컴파일러 (cc1)
: C 언어 소스파일은 컴파일 과정을 거쳐 어셈블리 소스 파일이 됨
3. 어셈블 단계 - 어셈블러 (as)
:어셈블리 소스 파일은 어셈블 과정을 거쳐 목적 파일이 됨
4. 링크 단계 - 링커 (ld)
: 목적 코드는 라이브러리와 링크되어 실행 가능한 파일이 됨
2. 옵션
2.1. 실행파일명 입력 [-o outfile]
$ gcc test.c -o test
$./test
Hellow World
2.2. 오브젝트파일 생성까지만 진행 [-c]
- 위 이론에서 3번까지만 진행. *.o파일을 생성.
- 각각의 오브젝트파일을 만들어 추후에 링크를 걸 경우 유용함.
ㄱ) 한번에 컴파일하는경우
$gcc -o main main.c fun1.c fun2.c
ㄴ) 나눠서 컴파일 하는 경우.
$gcc -c main.c
$gcc -c fun1.c
$gcc -c fun2.c
$gcc -o main main.o fun1.o fun2.o
- ㄴ)의 경우 파일 하나를 고쳐서 다시 컴파일하는 경우 유리하다. 파일 하나가 아니라 모듈 단위로 컴파일 하는 경우라면 더욱 더 ㄴ)의 형태로 가는 것이 좋다.
2.3 어셈블리까지 진행 [-s]
2.4 최적화 수준 지정(-Olevel]
- 숫자가 클수록 높은 최적화
2.5 디버깅 옵션 [-g]
2.6 추가 디파인 [-Dmacro[=defn]...]
2.7 라이브러리 디렉토리 지정[-Ldir...]
2.8 모든 에러 출력 [-Wwarn...] [-Wpedantic]
2.9 추가 헤더파일 디렉토리 지정 [-Idir...]
'IT관련 지식들' 카테고리의 다른 글
gdb 디버거 사용하기. (0) | 2016.07.26 |
---|---|
makefile (0) | 2016.07.25 |
우분투에서 Git 시작하기 (0) | 2016.07.07 |
가상 머신 네트워크 설정. (0) | 2016.06.30 |
소켓 통신 (0) | 2016.06.30 |