๐ ์์ํ๊ธฐ
Makefile์ ํฐ ํ๋ก๊ทธ๋จ์ ์ด๋ ๋ถ๋ถ์ ๋ค์ ์ปดํ์ผํด์ผ ํ๋์ง ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ C ๋๋ C++ ํ์ผ์ด ์ปดํ์ผ๋๋ค. ๋ค๋ฅธ ์ธ์ด์๋ ์ผ๋ฐ์ ์ผ๋ก Make์ ์ ์ฌํ ๋ชฉ์ ์ ์ํํ๋ ์์ฒด ๋๊ตฌ๊ฐ ์๋ค. Make๋ ๋ณ๊ฒฝ๋ ํ์ผ์ ๋ฐ๋ผ ์ผ๋ จ์ ์ง์นจ์ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ ์ปดํ์ผ์ ๋์ด์๋ ์ฌ์ฉํ ์ ์๋ค.
๋ค์์ Make๋ก ๋น๋ํ ์ ์๋ ์ข ์์ฑ ๊ทธ๋ํ์ ์์ด๋ค. ํ์ผ์ ์ข ์์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด ํ์ผ์ด ๋ค์ ์ปดํ์ผ๋๋ค.
C/C++ ๋์ฒด ๋น๋ ์์คํ ์ SCons, CMake, Bazel, Ninja๋ค. Visual Studio์ ๊ฐ์ ์ผ๋ถ ํธ์ง๊ธฐ์๋ ์์ฒด ๋น๋ ๋๊ตฌ๊ฐ ์๋ค. Java์ ๊ฒฝ์ฐ Ant, Maven, Gradle์ด ์๋ค. Go ๋ฐ Rust์ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด์๋ ์์ฒด ๋น๋ ๋๊ตฌ๊ฐ์๋ค.
Python, Ruby, Javascript์ ๊ฐ์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด์๋ Makefile๊ณผ ์ ์ฌํ ๊ฒ์ด ํ์ํ์ง ์๋๋ค. Makefiles์ ๋ชฉํ๋ ๋ณ๊ฒฝ๋ ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์ปดํ์ผํด์ผ ํ๋ ๋ชจ๋ ํ์ผ์ ์ปดํ์ผํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ก ๋ ํ์ผ์ด ๋ณ๊ฒฝ๋์ด๋ ๋ค์ ์ปดํ์ผํ ํ์๊ฐ ์๋ค. ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ ํ์ผ์ด ์ฌ์ฉ๋๋ค.
hello:
echo "Hello World"
- make ๋ช ๋ น์ด๋ก ์คํํ ์ ์์
Syntax
target: ์ ์ ์กฐ๊ฑด
command
command
command
- ๊ณต๋ฐฑ์ด ์๋ tab์ผ๋ก ๋ค์ฌ์ฐ๊ธฐ ํด์ผํจ
- command๋ ์ผ๋ฐ์ ์ผ๋ก ๋์์ ๋ง๋๋๋ฐ ์ฌ์ฉ๋๋ ์ผ๋ จ์ ๋จ๊ณ
- ์ ์ ์กฐ๊ฑด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ํ์ผ ์ด๋ฆ์ด๊ธฐ๋ ํจ. ํ์ผ์ target์ ๋ํ ๋ช ๋ น์ด ์คํ๋๊ธฐ ์ ์ ์กด์ฌํด์ผ ํจ.
C ํ์ผ์ ์ปดํ์ผํ๋ Makefile
blah: blah.o
cc blah.o -o blah # 3๋ฒ์งธ ์คํ
blah.o: blah.c
cc -c blah.c -o blah.o # 2๋ฒ์งธ ์คํ
blah.c:
echo "int main() { return 0; }" > blah.c # ์ฒซ๋ฒ์งธ ์คํ
References
'Linux' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Linux System Programming] File System #3 (0) | 2022.09.26 |
---|---|
[Linux System Programming] GCC ์ปดํ์ผ๋ฌ ์ฌ์ฉ๋ฒ #2 (0) | 2022.09.26 |
[Linux System Programming] vi cheat sheet #1 (0) | 2022.09.26 |
[Python] setup.py์ requirements.txt์ ์ฐจ์ด์ ๊ณผ ์ฌ์ฉ๋ฐฉ๋ฒ (0) | 2022.09.06 |