본문 바로가기

개발공부/C

컴파일과 CMake

리눅스계열에서 코드를 작성하여 컴파일하는 명령어

gcc -c -o main.o main.c
gcc -c -o foo.o foo.c
gcc -c -o bar.o bar.c

컴파일된 오브젝트 파일들을 링커(ld)을 실행해서 실행파일(app.out)을 생성한다.

gcc -o app.out main.o foo.o bar.o

위와 같이하면 C언어가 빌드가 된다.

이 후 발전하여 스크립트로 Makefile작성하면 컴파일하여 실행파일을 얻을 수 있게 되었다.

app.out: main.o foo.o bar.o
	gcc -o app.out main.o foo.o bar.o
    
main.o: foo.h bar.h main.c
	gcc -c -o main.o main.c
    
foo.o: foo.h foo.c
	gcc -c -o foo.o foo.c
    
bar.o: bar.h bar.c
	gcc -c -o bar.o bar.c

위와 같이 Makefile을 작성하고 

make

명령어을 치면 바로 실행파일을 만들어 낼 수 있다. 하지만 이 또한 Makefile을 작성 및 유지보수 관리를 해야한다.

그래서 이러한 작업을 추상화해서 형상관리까지 해주는 것이 cmake이다.

결국 비교해야할 것은 Makefile이랑 CMakeLists.txt이다.

Makefile의 경우 중간생성물은 object파일명과 빌드 바이너리명을 정의하고 각 빌드 target도 정의해줘야 하지만 cmake빌드 스크입트파일인 CMakeLists.txt는

ADD_EXECUTABLE(app.out main.c foo.c bar.c)

이렇게만 작성하고

cmake CMakeLists.txt

위 명령어를 입력하면 바로 Makefile이 생성된다. 그러고서

make

라고 입력해주면 바로 컴파일된 실행파일을 완성된다.

물론 다른 기능들도 스크립트 언어로 구현이 되어 있어서 문법만 안다면 빌드하는 전과정에 있어서 편리한 기능들을 많이 제공한다.

'개발공부 > C' 카테고리의 다른 글

자동변수  (0) 2019.10.17
변수의 영역  (0) 2019.10.17
C언어를 가장 쉽고 직관적으로 이해하는 강의  (0) 2019.10.17
배열을 함수에게 전달해주는 방법  (0) 2019.10.17
printf()함수  (0) 2019.10.15