개발공부/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
라고 입력해주면 바로 컴파일된 실행파일을 완성된다.
물론 다른 기능들도 스크립트 언어로 구현이 되어 있어서 문법만 안다면 빌드하는 전과정에 있어서 편리한 기능들을 많이 제공한다.