728x90
make์ Makefile
make
- SHELL์์ ์ปดํ์ผ ํ ๋ ์ข ์ข ๋ณด์ด๋ make ๋ช ๋ น์ด
- Makefile์ด ์๋ ๋๋ ํ ๋ฆฌ์์ make๋ง ์น๋ฉด ์ปดํ์ผ์ด ์คํ
- ํ์ผ ๊ด๋ฆฌ ์ ํธ๋ฆฌํฐ
- ํ์ผ ๊ฐ ์ข ์๊ด๊ณ๋ฅผ ํ์ ํ์ฌ Makefile์ ์ ํ ๋๋ก ์ปดํ์ผ๋ฌ์ ๋ช ๋ นํ์ฌ SHELL ๋ช ๋ น์ด ์์ฐจ์ ์ผ๋ก ์คํ๋๊ฒ ํ๋ค.
make ์ฅ์
- ๊ฐ ํ์ผ์ ๋ํ ๋ฐ๋ณต์ ๋ช ๋ น์ ์๋ํ๋ก ์ธํ ์๊ฐ ์ ์ฝ
- ํ๋ก๊ทธ๋จ์ ์ข ์ ๊ตฌ์กฐ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์์ผ๋ฉฐ ๊ด๋ฆฌ๊ฐ ์ฉ์ด
- ๋จ์ ๋ฐ๋ณต ์์ ๋ฐ ์ฌ์์ฑ์ ์ต์ํ
์์ diary_exe
3๊ฐ์ c ํ์ผ์ด include ํ ํค๋ํ์ผ ์์ฑ
1. diary.h
#include <stdio.h>
void memo();
void calendar();
2. ์ฌ๋ฃ๋ก ์ฌ์ฉ ๋ Cํ์ผ
vi memo.c
vi calendar.c
vi main.c
- memo.c
#include "diary.h" void memo(){ printf("I'm function Memo \n"); }
- calendar.c
#include "diary.h" void calendar(){ printf("I'm function Calendar() \n"); }
- main.c
#include "diary.h" int main(void){ memo(); calendar(); return 0; }
3. ์์ฑ๋ ํ์ผ ํ์ธํ๊ธฐ
๊ธฐ๋ณธ์ ์ธ ์ปดํ์ผ ๊ณผ์
- gcc๋ฅผ ์ด์ฉํ ์ปดํ์ผ
1. cํ์ผ์์ object ํ์ผ ์์ฑ
gcc -c -o memo.o memo.c
gcc -c -o calendar.o calendar.c
gcc -c -o main.o main.c
2. ๊ฐ object ํ์ผ์ ๋ฌถ์ด ์ปดํ์ผ์ ํตํด diary_exe ์คํํ์ผ ์์ฑ
gcc -o diary_exe main.o memo.o calendar.o
3. ๊ฒฐ๊ณผ ํ์ธํ๊ธฐ
- ๊ธฐ์กด์ ์ปดํ์ผ ๊ณผ์ ์ด ์ง๊ธ๊น์ง๋ 3๊ฐ์ ํ์ผ๋ง ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ต์ง ์๋ค.
- 3๋ฒ๋ง ๋ช ๋ นํด ์ฃผ๋ฉด ๊ฐ๋จํ๋ค.
- ํ์ง๋ง 1,000,000๊ฐ c ํ์ผ์ด ์๋ค๋ฉด 100๋ง ๊ฐ๊ฐ ํ์ํ๋ค.
Makefile์ ๊ตฌ์ฑ
Makefile์ ๊ตฌ์กฐ
- ๋ชฉ์ ํ์ผ(Target) : ๋ช ๋ น์ด๊ฐ ์ํ๋์ด ๋์จ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ํ์ผ
- ์์กด์ฑ(Dependency) : ๋ชฉ์ ํ์ผ์ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์ฌ๋ฃ
- ๋ช ๋ น์ด(Command) : ์คํ ๋์ด์ผ ํ ๋ช ๋ น์ด๋ค
- ๋งคํฌ๋ก(Macro) : ์ฝ๋๋ฅผ ๋จ์ํ ์ํค๊ธฐ ์ํ ๋ฐฉ๋ฒ
CC = gcc
target 1 : dependency1 dependency2
command1
command2
target 2 : dependency3 dependency4
command3
command4
Makefile ์์ฑ๊ท์น
- ๋ชฉํํ์ผ : ๋ชฉํํ์ผ์ ๋ง๋๋๋ฐ ํ์ํ ๊ตฌ์ฑ์์๋ค
- (tab)๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๋ช ๋ น1
- (tab)๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๋ช
๋ น2
- Makefile์ ์ ์ํ string์ผ๋ก ์นํ
- ๋ช ๋ น์ด์ ์์์ ๋ฐ๋์ tab์ผ๋ก ์์
- Dependency๊ฐ ์๋ target๋ ์ฌ์ฉ ๊ฐ๋ฅ
$ make clean
ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ object ํ์ผ๋ค๊ณผ ์์ฑ๋ ์คํํ์ผ์ธ diary_exe๋ฅผ rm ๋ช ๋ น์ด๋ก ์ ๊ฑฐ$ make
๋ก ์คํ
๋งคํฌ๋ก ์ฌ์ฉํ๊ธฐ
- ์ค๋ณต๋๋ ํ์ผ ์ด๋ฆ์ ๋จ์ด๋ก ์นํ
์์ฑ๊ท์น
- ์๊ดํธ๋ ์ค๊ดํธ ๋๋ฌ์ธ๊ณ ์์ '$'๋ฅผ ๋ถ์ธ๋ค.
- ํญ์ผ๋ก ์์ํด์๋ ์๋๊ณ , :,=,#,"" ๋ฑ ๋งคํฌ๋ก ์ด๋ฆ์ ์ฌ์ฉํ ์ ์๋ค.
- ๋งคํฌ๋ก๋ ๋ฐ๋์ ์นํ๋ ์์น๋ณด๋ค ๋จผ์ ์ ์ ๋์ด์ผ ํ๋ค.
CC = gcc
CFLAGS = -W -WALL
TARGET = diary_exe
$(TARGET) : memo.o calendar.o main.o
$(CC) $(CFLAGS) $(TARGET) memo.o calendar.o main.o
memo.o : memo.c
$(CC) $(CFLAGS) -o memo.o memo.c
calendar.o : calendar.c
$(CC) $(CFLAGS) -o calendar.o calendar.c
main.o : main.c
$(CC) $(CFLAGS) -o main.o main.c
clean :
rm * .o diary_exe
๋ด๋ถ ๋งคํฌ๋ก ์ฌ์ฉ
CC = gcc
CFLAGS = -W -Wall
TARGET = diary_exe
OBJECT = memo.o main.o calendar.o
all : $(TARGET)
.c.o :
$(CC) $(CFLAGS) -c $<
$(TARGET) : $(OBJECT)
$(CC) $(CFLAGS) -o $@ $^
clean :
rm *.o diary_exe
'TIL (Today I Learned) > Linux' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Linux] Shell์ ๊ฐ๋ (0) | 2021.08.30 |
---|---|
[Linux] ํ๊ฒฝ๋ณ์ (0) | 2021.08.27 |
[MySql] lib๋ฅผ ๋ฆฌ๋ ์ค C์์ ์ฌ์ฉํ๊ธฐ (0) | 2021.08.25 |
[Linux] ๋ช ๋ น์ด ๋ฐฑ๊ทธ๋ผ์ด๋ (0) | 2021.08.25 |
[Linux] vi ํ๋ฉด ๋ถํ (0) | 2021.08.23 |