Makefile
작성 수정
- 빌드 자동화를 위한 파일
- **
make**의 설정 파일 - 빌드 규칙, 명령어, 의존성이 정의되어있다.
역할
Makefile은 빌드, 테스트, 배포 등 소프트웨어 개발 과정에서 반복되는 작업을 간단하게 자동화하고, 의존성을 관리하여 효율적인 개발 환경을 제공하는 중요한 도구입니다. 특히 큰 프로젝트에서 복잡한 빌드 과정을 단순화하는 데 유용합니다.
- 빌드 자동화:
Makefile은 소스 코드를 컴파일하고 링크하는 작업을 자동화합니다. 개발자는 컴파일 명령어를 일일이 기억할 필요 없이,make명령을 사용해 소프트웨어를 쉽게 빌드할 수 있습니다.
- 작업 간소화:
- 코드 빌드 외에도 테스트 실행, 코드 분석, 파일 정리 등 여러 작업을 정의할 수 있습니다. 복잡한 명령어도 하나의 규칙으로 정의해 간단하게 실행할 수 있습니다.
- 의존성 관리:
Makefile은 파일들 간의 의존성을 관리합니다. 즉, 소스 코드 파일이 수정되면 관련된 파일만 다시 빌드하여 시간과 리소스를 절약할 수 있습니다.
구조
- **규칙(rule)**들로 구성된다.
- 규칙은 목표(target), 의존성(dependency), 명령어(commands) 들로 이루어져있다.
target: dependencies
command
- target: 만들고자 하는 파일이나 작업입니다.
- dependencies:
target을 만들기 위해 필요한 파일이나 다른 규칙들입니다. - command:
target을 빌드하거나 목표를 달성하기 위해 실행되는 쉘 명령어입니다. 각 명령어는 탭으로 들여쓰기가 되어야 합니다.
예시
# main.o를 생성하는 규칙
main.o: main.c
gcc -c main.c -o main.o
# 프로그램을 빌드하는 규칙
my_program: main.o utils.o
gcc main.o utils.o -o my_program
# 파일을 정리하는 규칙
clean:
rm -f *.o my_program
main.o를 생성하는 규칙:main.c파일이 수정되면 이 규칙이 트리거되어main.o를 재컴파일합니다.
my_program을 빌드하는 규칙:main.o와utils.o파일이 준비되면 이를 링크하여my_program이라는 실행 파일을 만듭니다.
clean규칙:- 빌드된 파일들을 정리하는 작업입니다.
make clean명령어를 실행하면 이 규칙이 실행됩니다.
- 빌드된 파일들을 정리하는 작업입니다.
Makefile의 장점:
-
반복 작업의 자동화: 컴파일, 테스트, 배포 같은 반복 작업을 쉽게 자동화할 수 있습니다.
-
효율적인 빌드: 수정된 부분만 재빌드하여 시간을 절약할 수 있습니다.
-
일관성 유지: 여러 개발자가 참여할 때 동일한 명령어로 작업을 수행하므로 일관성을 유지할 수 있습니다.
-
명령어
Makefile을 실행하려면, 터미널에서make명령어를 사용하면 됩니다.make명령어는 현재 디렉토리에 있는Makefile을 읽고, 정의된 규칙을 실행합니다.기본 실행 방법:
-
기본 규칙 실행:
make명령어를 입력하면Makefile에 정의된 첫 번째 규칙이 실행됩니다.
make -
특정 타겟 실행:
- 특정 규칙(타겟)을 실행하고 싶으면
make뒤에 타겟 이름을 명시합니다.
make <target>예를 들어,
clean규칙을 실행하고 싶다면 다음과 같이 입력합니다.make clean - 특정 규칙(타겟)을 실행하고 싶으면
예시:
위에서 설명한 예시
Makefile을 기준으로:-
프로그램을 빌드하려면,
make명령어를 입력합니다. 이 경우my_program규칙이 첫 번째 규칙이므로 실행됩니다.make -
만약 빌드된 파일을 정리하고 싶다면,
clean타겟을 명시하여 실행합니다.make clean
주의할 점:
-
Makefile이름: 기본적으로 파일 이름은Makefile이어야 합니다. 만약 파일 이름이 다르다면,make -f <filename>형식으로 파일을 지정해서 실행할 수 있습니다.make -f MyMakefile
-
-
타겟 없이
make실행하면 첫 번째로 정의된 타겟이 실행됩니다. 다른 타겟을 실행하려면 타겟 이름을 명시해야 합니다.
이렇게 make 명령어를 사용하여 Makefile에 정의된 작업을 손쉽게 실행할 수 있습니다.
make와 운영체제
- 리눅스:
make는 기본적으로 리눅스에 포함된 도구입니다. 리눅스 개발 환경에서 자주 사용되며, C/C++ 프로젝트뿐만 아니라 다양한 언어 및 도구에서 빌드를 자동화하는 데 유용합니다.- macOS: macOS도 Unix 계열이므로 기본적으로
make명령어를 사용할 수 있습니다. 다만,Xcode Command Line Tools가 설치되어 있어야 합니다. - Windows: Windows에서는
make가 기본적으로 설치되어 있지 않습니다. 하지만 Windows 환경에서도make를 사용할 수 있는 방법이 있습니다:- WSL(Windows Subsystem for Linux): Windows에 WSL을 설치하면 리눅스 배포판에서
make를 사용할 수 있습니다. - MinGW, Cygwin: Windows용 리눅스 명령어 툴체인을 설치하면
make를 포함한 여러 Unix 명령어를 사용할 수 있습니다. - Git Bash: Git for Windows에 포함된 Bash 쉘을 사용하면 일부
make명령어를 사용할 수 있습니다.
- WSL(Windows Subsystem for Linux): Windows에 WSL을 설치하면 리눅스 배포판에서
- macOS: macOS도 Unix 계열이므로 기본적으로
**make는 주로 Unix 계열 운영체제(리눅스, macOS 등)**에서 사용하는 명령어입니다. make는 빌드 자동화 도구로, 소스 코드의 컴파일, 테스트, 배포 등 여러 반복적인 작업을 자동화하는 데 사용됩니다. 기본적으로 Makefile이라는 파일에 정의된 규칙을 읽고, 그에 따라 빌드 작업을 수행합니다.
결론
make는 리눅스와 macOS 같은 Unix 계열 운영체제에서 주로 사용하는 명령어입니다. 하지만 Windows에서도 위에서 언급한 방법을 통해 사용할 수 있으며, 특히 크로스플랫폼 개발 환경에서는 여전히 중요한 도구로 많이 사용됩니다.