본문 바로가기
프로그래밍/리눅스

c++] make, makefile의 사용방법(기본적인 설명)

by Hwan2 2020. 5. 18.
728x90
반응형

 

 

1. makefile 이란??

 

 

 

 

요 세개의 파일이 있다고 가정해 봅시다.

 

우리는 아래와 같은 명령어를 통해 실행파일을 만들어낼 수 있습니다.

 

 

 

$ g++ -c test1.cpp add.cpp    -> test1.o, add.o 파일 생성(오브젝트 파일)

 

 

$ g++ -g test1.o add.o    -> a.out 파일 생성(실행 파일)

 

 

or

 

 

$ g++ test1.cpp add.cpp    -> test1.o, add.o, a.out 파일 생성

 

 

 

이렇게 된다면 해당 폴더 안에는 6개의 파일이 존재하게 됩니다.

 

 

그런데 만약에 헤더 파일을 바꾸거나, mius.cpp라는 코드가 추가되거나, 동적 라이브러리를 추가하게 되거나 등....

 

다시 컴파일 해야할 일이 생깁니다.

 

또한 .o(오브젝트 파일)은 쓸모가 없어고 보기에도 폴더 자체가 지져분해 보입니다. 

 

아니면 g++하는 과정에서 test1.o 가 test1.cpp를 덮어쓰는 경우도 생깁니다.

 

$ g++ test1.cpp add.cpp

요것만 하면 되니 굳이 안써도 될 것 같다고요??!! 

물론, 저렇게 짧으면 굳이 작성안해도 되지만...... 코드가 커질경우는 예기가 달라집니다.

 

 

$ g++ -std=c++17 testServer.cpp -o a.out -lboost_system -lcrypto -lssl -lcpprest -lpthread

 

현재 제가 프로젝트에서 사용하고있는 cpp 서버입니다. 딱 봐도 내용이 깁니다.

 

저걸 언제 일일히 다 쳐가면서 할 수 있을까요??

 

 

 

이런 불편하고 안좋은 점들을 보완하고자 나온것이 makefile입니다.

 

설치방법은 간단합니다.

 

$ sudo apt-get install make

 

 

그럼 makefile 사용법에 대해 살펴보겠습니다.

 

 

 

 

 

 

2. makefile 사용법

 

 

 

문법

 CC  컴파일러 지정
 INC  include 되는 헤더 파일의 패스를 추가
 LIBS  링크할 때 필요한 라이브러리를 추가
 CFLAGS   컴파일에 필요한 각종 옵션을 추가
 OBJS   목적 파일 이름
 SRCS   소스 파일 이름
 TARGET  링크 후에 생성될 실행 파일의 이름
 clean  makefile실행 후 지울 파일 목록 

더 있지만 자주 사용되는 요정도만 알아도 충분하다고 생각됩니다.

 

#Makefile

CC = g++

test.exe : test.o add.o
    g++ -g test.o add.o -o test.exe

add.o : add.cpp
    g++ -c add.cpp

test.o : test.cpp
    g++ -c test.cpp

clean :
    rm -rf *.o *.exe

 

Makefile 실행

 

 

 

 

 

설명

 

 

 

1. Makefile은 아래서부터 위로 실행됩니다.

 

때문에 

 

이렇게 실행 파일의 위치가 바뀌어 버리면 오브젝트 파일만 생성되고 멈추게 됩니다.

 

 

 

2. 문법을 일치시켜 줘야 한다.

 

이것이 무슨말이냐??

 

add.o : add.cpp
    g++ -c add.cpp

 

 

만약 다르게 한다면??

test1234.exe : test.o add.o
    g++ -g test.o add.o -o test.exe

 

test1234.exe 즉, 실행되어야할 실행파일 이름과 g++ -g test.o add.o -o test.exe 이 다르다면

실행파일 생성이 불가능 합니다.

 

 

 

3. 실행되는 구간에는 Tab을 반드시 써야 한다.

 

 

Makefile에서 제일 까다로운 부분입니다. Makefile은 Tap으로 실행 유무를 판단하게 되는데

스페이스바로 할 경우에는 Error메시지를 띄웁니다.

 

또한 Tab을 했는데 안먹힐 때가 있습니다.

이 경우는 .vimrc 파일을 수정해서 생긴 결과인데, set tabstop와 set cindent 부분때문입니다.

이 경우 수정해도 잘 안되는 경우가 있습니다.

때문에 해결 방법은

vim에서 :set noexpandtab 을 해주거나 Ctrl+v 누룬 후 Tab 키를 눌러주면 됩니다.

 

 

 

 

4. CC

 

C++에 사용되는 컴파일러 g++을 사용해야하기 때문에

CC = g++로 설정한 것입니다.

 

 

 

 

5. clean

 

클린 명령어를 사용할땐 $ make clean 을 처주시면 됩니다.

해당 명령어를 입력하면 사용자가 정의한 파일들이 지워지게 됩니다.

 

 

 

 

여기까지가 make의 기본적인 설명입니다.

 

다음글은 Makefile의 메크로 사용법에 대해 설명하겠습니다.

 

 

 

P.S

이거 진짜 정리하기 너무 귀찮고 너무너무너무 하기 싫었는데

그래도 꾸역꾸역 하니깐 되네요.....

2년간 묵힌 숙제 반정도 끝!!

 

 

 

 

 

 

 

 

 

 

 

 

반응형

댓글


스킨편집 -> html 편집에서