목차
- 리눅스 빌드 시스템(1) gcc Linux Build System gcc
- 리눅스 빌드 시스템(2) make Linux Build System make
- 리눅스 빌드 시스템(3) cmake Linux Build System cmake
- 리눅스 빌드 시스템(4) make 문법
개요
Makefile 을 단계별로 작성하며 상세 작성 법을 배우고 다른 사람이 작성한 Makefile 을 이해할 수 있도록 숙달해야 한다.
Build
Home 디렉토리에 test6 디렉토리를 생성하고 c, h, Makefile을 생성해 준다.
이제 각 함수의 함수 파일에 코드를 작성해 준다.
func1.c
#include "common.h"
void func1(){
printf("Func1 TEST START\n");
printf("================\n");
printf("Func1 TEST END!\n");
}
func2.c
#include "common.h"
void func2(){
printf("FUNC 2 TEST START!!\n");
printf("*******************\n");
printf("FUNC 2 TEST END!!\n");
}
main.c
#include "common.h"
#include "func1.h"
#include "func2.h"
void func1();
void func2();
int main(){
printf("TEST START!\n");
func1();
func2();
printf("TEST END!\n\n");
return 0;
}
func1.h
void func1();
func2.h
void func2();
common.h
#include <stdio.h>
Makefile
result: main.o func1.o func2.o
gcc main.o func1.o func2.o -o result
main.o: main.c common.h func1.h func2.h
gcc -c main.c
func1.o: func1.c common.h func1.h
gcc -c func1.c
func2.o: func2.c common.h func2.h
gcc -c func2.c
clear:
rm -r ./*.o result
모든 소스 코드를 작성 후 make를 실행한다.
이후 result 파일이 성공적으로 생성되었다면, 실행 시 위와 같은 화면이 출력되게 된다.
변수 사용
gcc 컴파일러 및 *.o로 이루어진 파일들을 목록화 하여 Makefile을 간단하게 만들 수 있다.
make clean을 통해 기존의 *.o 파일들을 삭제 후 아무 코드 파일이나 수정 후에 다시 make를 해주면 기존과 동일하게 노출되는 것을 확인할 수 있다.
- make clean -> func1.c에서 TEST START2 로 변경해 주었음 -> make -> result
특수 변수 사용
자주 사용되는 키워드를 변수로 표현한다.
- $@ : Target을 나타냄
- $^ : 의존성 타겟들을 나타냄
- $< : 의존성 타겟 중 첫 번째 파일을 나타냄
컴파일 옵션 지정
- -g : 디버깅 (Trace) 가능하도록 설정
- -Wall : Warning 이 뜨면 Error처럼 멈추도록 함
- -O2 : 최적화 2단계 옵션
wildcard
wildcard 함수
- 지정된 패턴에 해당하는 파일 목록 갖고오기
- *.c → 현재 디렉토리 내 모든 .c 파일 가져오기
확장자 치환 사용
- 변수에 할당된 파일 목록에서 확장자 치환
- 변수명:pattern=replacement
- SRCS의 .c 를 .o 변경해서 OBJS 에 저장
makedepend
입력한 .c 파일을 분석해서 의존성 헤더파일을 등록해주는 make 도우미 유틸리티
makedepend 설치 : sudo apt install xutils-dev -y
makedepend 실행 : makedepend main.c func1.c func2.c -Y
makedepend 사용 시Makefile.bak 백업 파일이 생성 되고, Makefile 에 의존성 파일이 작성 된다.
Makefile의 20 ~ 24줄에 의존성이 작성된 것을 볼 수 있다.
SUFFIXES
depend라는 이름의 Target 추가해 준다.
makedepend 유틸리티를 사용하여 .o 확장자를 가진 항목들에 적용시켜 준다.
.c .o라는 이름의 Target을 추가해 준다.
.c 파일을 .o 파일로 컴파일 하게끔 내용을 넣어준다.
suffiexes는 파일 확장자와 관련된 규칙을 지정할 때 사용한다.
make을 clean 시켜주어 기존의 .o 및 result를 제거해 준다.
make depend를 통해 의존성을 적용시켜 준다.
make를 실행한 후 생성된 result를 실행해 준다.
SUFFIXES 는default
.c 파일을 .o 로 컴파일하라는 내용은 Default 이다. 따라서 생략해 주어도 무방하다.
'임베디드 > 리눅스(Linux)' 카테고리의 다른 글
리눅스 다양한 쉘 명령어 Linux Shell Command (0) | 2024.09.13 |
---|---|
리눅스 쉘 파일 관리 명령어 Linux Shell (0) | 2024.09.13 |
리눅스 빌드 시스템(4) make 문법 (0) | 2024.09.12 |
리눅스 빌드 시스템(3) cmake Linux Build System cmake (0) | 2024.09.12 |
리눅스 빌드 시스템(2) make Linux Build System make (0) | 2024.09.12 |