Linux

make file 만드는 방법

총알 2022. 1. 26. 23:33
728x90

이번에는 리눅스에서 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 라즈베리파이

728x90