[Linux System Programming] Makefile tutorial

천승주·2022년 9월 21일
0

시작하기

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

man make

output

MAKE(1)                          User Commands                         MAKE(1)

NAME
       make - GNU make utility to maintain groups of programs

SYNOPSIS
       make [OPTION]... [TARGET]...

...
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

0개의 댓글