리눅스에서 컴파일을 실행한다면 make 명령어를 통해 컴파일을 실행하는 경우가 많습니다.
make란 Makefile이 있는 디렉터리에서 make만 입력하면 컴파일이 진행됩니다.
이 make 명령어는 파일 관리 유틸리티로써 이러한 명령어에 의한 처리가 가능하게 해 줍니다.
그럼 make파일의 정의에 대해 먼저 보겠습니다.
파일 간의 종속관계를 파악해서 Makefile(기술 파일)에 적힌 순서대로 컴파일러에
명령을 전달하여 Shell명령이 순차적으로 실행될 수 있게 합니다.
이러한 make 파일을 쓰는 이유가 무엇일까요?
make 파일을 사용함으로써 얻을 수 있는 장점은 다음과 같습니다.
1. 각 파일에 대한 반복적 명령의 자동화로 인한 시간 절약합니다.
2. 프로그램의 종속 구조를 빠르게 파악할 수 있습니다.
3. 단순 반복 작업 및 재작성을 최소 하하여 관리가 용이합니다.
기존의 컴파일은 gcc 컴파일러를 이용하여 진행하였습니다.
이 방법이 크게 불편한 점은 없지만 컴파일을 진행할 파일이 작은 경우가 아닌
100개 이상이 생겨난다면 굉장히 비효율적인 방법이 되어버립니다.
예를 들어 test.c라는 파일을 컴파일하기 위해서는
gcc -c o test.o test.c
위의 명령을 통해 컴파일 결과인 test.o라는 object 파일을 생성할 수 있습니다.
gcc 컴파일 과정에서 -o 옵션을 넣지 않아도 object 파일 이름이 파일 이름. o로 자동 생성됩니다.
하지만 실행 파일 생성 시 -o 옵션을 넣지 않으면
모든 파일이 파일 이름. out이라는 이름을 가지게 되므로 여러 개의
실행 파일을 생성해야 할 때 효율적인 옵션입니다.
gcc 컴파일러의 문제점은 여러 개의 파일을 할 때라고 하였습니다.
gcc -o test1.o test1.c
gcc -o test2.o test2.c
gcc -o test3.o test3.c
gcc -o test4.o test4.c
gcc -o test5.o test5.c
gcc -o test6.o test6.c
gcc -o test7.o test7.c
gcc -o test8.o test8.c
...
이런 식으로 gcc 컴파일러를 실행해야 하므로 비효율적입니다.
gcc컴파일러의 이러한 단점을 보완하기 위한 make 컴파일 과정에 대해 알아보겠습니다.
make 명령어를 실행하기 전에 먼저 Makefile을 작성해야 합니다.
Makefile의 구조는 다음과 같습니다.
CC = gcc
target1 : dependency1 dependency2
command1
command2
target2 : dependency3 dependency4
command3
command4
먼저 첫 번째 줄의 gcc 부분은 매크로의 정의를 의미합니다.
target1과 target2는 타깃을 정하는 구문이며
dependency는 그 타깃의 의존성을 정의합니다.
마지막으로 command는 명령어에 해당하는 구문입니다.
그럼 vi Makefile을 통해 아래와 같이 작성할 수 있습니다.
test_exe : test.o
gcc -o test_exe test.o
test.o : test.c
gcc -o test.o test.c
clean : rm *.o test_exe
이제 Shell상에 make를 사용하여 컴파일하고
make clean을 통해 컴파일된 object 파일들을 삭제할 수 있습니다.
'서버 > 리눅스' 카테고리의 다른 글
[Linux] 프로세스란? (21) | 2022.01.11 |
---|---|
[Linux] chroot 500 oops error 해결 (8) | 2022.01.10 |
[Linux] Directory file count (0) | 2021.12.28 |
[Linux] 일정 기간 지난 파일 삭제 (0) | 2021.12.28 |
[Linux] Crontab이란? (0) | 2021.12.27 |
댓글