개발공부/C

컴파일과 CMake

dyson_ok 2019. 10. 25. 18:22

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

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

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

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