이번에는 리눅스에서 make file을 만들어서 컴파일 하는 방법을 연습해봤다.
-컴파일이란 소스코드(c파일)를 object 파일로 만드는 과정을 말한다.
우선 소스 코드를 짜기에 앞서 먼저 make file의 규칙에 대해 서술하고자 한다.
TargetList: dependencyList
commandList
Targetlist : 명령이 수행되어 생성될 결과 파일을 지정
dependencylist: 목표를 수행하기 위해 필요한 의존 관계 설정
commandlist: 의존관계에 정의된 파일의 내용이 바뀌었거나 targetlist에 해당하는 파일이 없을 때 여기에 정의 된 내용이 차례로 실행
makefile을 만들기에 앞서 간단한 계산기를 만들기 위해 main.c calculator.c 파일을 만들었다.
main.c
#include <stdio.h>
extern int calculator(void);
void main(void)
{
int answer;
printf("start calculator\n\r");
while(1)
{
answer = calculator();
printf("answer is %d\n\r\n\r",answer);
}
}
calculator.c
#include <stdio.h>
int calculator(void)
{
int num1, num2=0;
char cal=0;
int result=0;
printf("input number1 \n\r");
scanf("%d",&num1);
printf("input -, +, *, / \n\r");
scanf("%s",&cal);
printf("input number2 \n\r");
scanf("%d",&num2);
switch(cal)
{
case '-':
result = num1-num2;
break;
case '+':
result = num1+num2;
break;
case '*':
result = num1*num2;
break;
case '/':
result = num1/num2;
break;
}
return result;
}
그리고 이어서 makefile을 만들었다.
makefile
cal : main.o calculator.o
gcc -o cal main.o calculator.o
main.o : main.c
gcc -c main.c
calculator.o : calculator.c
gcc -c calculator.c
clean :
rm -f main.o calculator.o cal
gcc 앞은 tab키를 써야하니까 이건 명심하도록하자.
pi@raspberry:~/study/example $ make
gcc -c main.c
gcc -c calculator.c
gcc -o cal main.o calculator.o
makefile이 있는 경로에서 위와 같이 입력하면 main.c와 calculator.c를 컴파일 한 뒤 main.o와 calculator.o 파일을 이용해서 cal라는 실행파일을 생성한다.
pi@raspberry:~/study/example $ ./cal
start calculator
input number1
1
input -, +, *, /
+
input number2
7
answer is 8
그리고 ./cal를 입력하면 계산기가 실행되고 계산기를 사용할 수 있게된다.
무한루프로 코드를 짜서 프로그램이 끝나지 않기때문에 ctrl + c로 프로그램을 종료해줘야 한다.
pi@raspberry:~/study/example $ make clean
rm -f main.o calculator.o cal
make clean 명령을 립력하면 생성된 object 파일과 cal 실행파일을 제거 할 수 있다.
다음 시간에는 매크로를 이용해서 make 파일을 만드는 방법을 공부해야겠다.
- 참고서적 : 사물인터넷을 위한 리눅스 프로그래밍 with 라즈베리파이
'Linux' 카테고리의 다른 글
매크로를 이용한 make file 생성 (0) | 2022.02.08 |
---|---|
리눅스 명령어 정리 (0) | 2022.01.14 |
라즈비안 커널 소스 다운 & 빌드(raspbian kernel source download & build) (0) | 2022.01.12 |
라즈비안 스크린 크기 조정(debian display screen setting) (0) | 2022.01.08 |
라즈비안에 한글폰트 설치 (0) | 2022.01.08 |