Linux 가상환경에서 GCC를 이용해 .C 파일을 컴파일 하는 다양한 방법을 공부해 보았다
// unix3.h
#include <stdio.h>
void printUNIX();
void printGCC();
// unix3-1.c
#include <stdio.h>
#include "unix3.h"
int main(){
printUNIX();
printGCC();
return 0;
}
// unix3-2.c
void printUNIX(){
printf("UNIX\n");
return 0;
}
// unix3-3.c
void printGCC(){
printf("GCC\n");
return 0;
}
새로 만든 directory 안에 위 파일들을 만들어 준다
그리고 gcc unix3-1.c 를 입력하면
위와 같은 오류를 볼 수 있다
위와 같은 문제를 해결하고, c파일이 많아질 수록 일일이 컴파일 해야하는 문제가 생기기 때문에
make 명령어를 사용한다!
// cal.h
#include <stdio.h>
double add(double x, double y);
double minus(double x, double y);
double multi(double x, double y);
double divide(double x, double y);
// cal.h
#include <stdio.h>
#include "cal.h"
enum{
Add=1,
Minus,
Multi,
Divide,
Exit
};
int main(){
double val1, val2;
int select;
double result;
while(1){
printf("Enter val1, val2 : ");
scanf("%lf %lf", &val1, &val2);
printf("Enter calculate mode (1:Add, 2:Minus, 3:Multi, 4:Divide, 5:Exit)\n");
scanf("%d", &select);
switch(select){
case Add:
result = add(val1, val2);
break;
case Minus:
result = minus(val1, val2);
break;
case Multi:
result = multi(val1, val2);
break;
case Divide:
result = divide(val1, val2);
break;
case Exit:
return 0;
default:
printf("input right number ㅡ.ㅡ\n");
break;
}
printf("result value : %lf\n", result);
}
return 0;
}
// add.c
#include <stdio.h>
double add(double x, double y){
return x + y;
}
// minus.c
#include <stdio.h>
double minus(double x, double y){
return x - y;
}
// multi.c
#include <stdio.h>
double multi(double x, double y){
return x*y;
}
// divide.c
#include <stdio.h>
double divide(double x, double y){
return x/y;
}
ex) 간단한 계산기 프로그램
- calculate.c <- 값을 입력 받는 파일
- calculate.h <- calculate.c가 참조해야할 함수들의 정보가 들어있음
- add.c minus.c multi.c divide.c <- 연산을 수행하는 함수
1. gcc 명령어를 사용한 빌드 cal1
c파일이 수십개가 되었을 때 저렇게 하나하나 링킹해서 컴파일하는 상상을 하니 숨이 막힌다
그래서 이때 Makefile을 이용하면 편하게 작업을 할 수 있다
2. Makefile 을 이용한 빌드 cal2
mkdir Makefile 입력해서 Makefile 을 만들어준다
매크로 정리
CC = gcc | C 컴파일러를 gcc컴파일러로 설정함 default : CC |
CFLAGS = -g | gcc의 옵션을 세팅함 -> gcc -g |
TARGET = cal2 | 목표의 이름을 cal2로 설정 |
OBJECTS = cal.o add.o minus.o multi.o divide.o | 목표와 의존 관계에 있는 파일들을 지정 |
$(TARGET): $(OBJECTS) | 의존 관계부분에 정의된 파일의 내용이 바뀌었거나, 목표 부분에 해당하는 파일이 없을 때 아래에 정의된 것들이 차례대로 실행됨 |
$(CC) -o $(OBJECTS) | gcc -o cal.o add.o minus.o multi.o divide.o 를 실행한다고 보면 됨 |
clean: rm-rf *.o $(TARGET) | make clean 을 실행하면 rm(지운다) -rf(재귀적으로 강제로) *.o(.o로 끝나는 모든 파일들과 TARGET을) |
위와 같이 잘 만들어지는 것을 볼 수 있다!
운영체제에서 실습중인 XV6 OS도 make를 통해서 실행시키기 때문에
gcc를 공부함으로써 운영체제의 실행에 대한 이해도 높아진 것 같다!
시간이 된다면 지금까지 배운 리눅스 명령어와 gcc를 활용해서 XV6를 내 맘대로 바꿔보고싶긴하다..
'DevOps > Linux' 카테고리의 다른 글
[Linux] 웹사이트 동작 체크 명령어는? (0) | 2022.04.10 |
---|---|
[Linux] 리눅스 서버 접속 방법과 도구(ubuntu) (0) | 2022.03.31 |
Ubuntu IP 설정하기 (Virtual Box) (0) | 2022.03.13 |