-
처음에 gcc를 사용하게 되면, visual studio의 경우에는 헤더파일을 단순히 분류만 잘하면 되었었는 데, gcc는 그런 gui가 없기에 당황하게 될 수 있다.
나도 처음 gcc를 사용했을 때, 당황한 경험이 있고, 블로그에다가 다른 블로그 포스팅한 것을 스크랩했었다.
그런데, 이제 어떻게 헤더파일을 포함해서 컴파일 하는 지 제대로 배워서 다시 포스팅하고자 한다..
Makefile
Makefile은 그냥 make 커맨드를 치면 빌드를 다 해주는 파일이다.
헤더 파일을 만들어야 하는 코드를 짜는 경우에는 Makefile을 만드는 것이 필수이다. 물론 그러지 않으면 동작하지 않는 것은 아니지만, 매번 위 과정을 해주는 것은 매우 번거롭고, 코드를 공유했을 때도 Makefile이 없으면 사용자가 어떤 코드를 어떻게 컴파일 해야하는 지 모르니 Makefile을 꼭 만들어 주도록 하자.
git clone을 했을 때, Makefile을 만나게 된다면, make를 한번 쳐주자. 그러면 우리가 원하는 바이너리들이 모두 완성될 것이다. 그런 Makefile을 어떻게 만드느냐?
아래 예시를 보자.
all: sum_test sum_test: sum.o main.o g++ -o sum_test sum.o main.o sum.o: sum.h sum.cpp g++ -c -o sum.o sum.cpp main.o: main.cpp sum.h g++ -c -o main.o main.cpp clean: rm -f sum_test *.o
위 Makefile에서
all:
은 그냥 make를 했을 때 동작하는 것이다.all
옆에 있는 바이너리sum_test
가 필요하다는 뜻이다. 즉,sum_test
를 만들겠다는 뜻이다.그래서
make
를 하게 되면sum_test
가 있어야 완료가 된다.그런데,
sum_test
가 없으면 어떻게 하는 가?바로 아래에
sum_test: sum.o main.o
이런식으로 텍스트가 있는 것을 확인할 수 있다.이는 무슨 뜻이냐면,
sum_test
를 만들려면sum.o main.o
가 필요하다는 뜻이다.만약에
sum.o
와main.o
가 존재한다면,g++ -o sum_test sum.o main.o
를 실행한다.그런데 이때또,
sum.o, main.o
가 없으면 바로 아래에sum.o: ~ / main.o: ~
를 참고하게 된다.sum.o
는sum.h
와sum.cpp
를 필요로 하고, 두 파일이 모두 있다면, 바로아래에 쓰인g++ -c -o sum.o sum.cpp
를 실행하게 된다.이렇게 make파일은 동작하게 된다.
제일처음에 말했던
all: sum_test
이부분도 사실은sum\_test
를 만들겠다는 것이 아니라,sum\_test
를 필요로 한다는 것이고, 만약 그 아래에 특정 명령어가 있으면sum\_test
가 있으면 실행했을 것이다.마지막으로
clean:
이 있는 데, 이부분은make clean
을 하게되면 동작하는 것이다.이런 것이 바로
Makefile
이다.그래서 어떻게 헤더파일 포함시켜서 컴파일하는 데?
$ls main.cpp sum.cpp sum.h $gcc -c -o main.o main.cpp $gcc -c -o sum.o sum.cpp $gcc -o main main.o sum.o $ls main main.o sum.o main.cpp sum.cpp sum.h
위처럼 따라하게 되면 헤더파일을 포함시켜서 컴파일 시킬 수 있다.
헤더파일은 사실 컴파일하거나 하지 않고, 각각 c코드들을 gcc -c 옵션으로 컴파일 시키고 난 다음, 마지막으로 한꺼번에 컴파일 시켜주면 된다.
'Study > Tips' 카테고리의 다른 글
gdb script.... (0) 2020.06.08 irvine32.inc library 함수들 정리 (0) 2020.05.15 어셈블리 (0) 2020.04.19 tagMSG.message (0) 2020.04.18 IDA 로 파일 dump 하기 (0) 2020.04.06 댓글