[CMake] 03. 개념 이해 (기본 구조)

글쓴이 keunjun 날짜

아래 내용은 Ken Martin과 Bill Hoffman의 Mastering CMake을 바탕으로 정리한 것이다.

Make를 사용하다보면 target, generators, commands와 같은 다양한 개념(concept)에 대해서 접하게 될 것이다. 물론, 몰라도 CMake를 사용하는데 문제는 없지만 api document를 읽을 때 용어와 기본 구조를 모른다면 이해가 완벽하게 되지 않을 가능성이 높다. 이번에는 간단하게 CMake의 구조에 대해서 이해해 본다.

CMake는 C++로 구현이 되어있다. 그리고 대부분에 개념들이 C++의 class로 구현되어 있으며 CMake는 다양한 명령어를 통해 class에 접근하여 속성들을 읽고 쓸 수 있게 해두었다. 속성 값들이 모두 쓰여지면 그 값들을 바탕으로 CMake는 플랫폼에 맞는 build process 파일들(Makefile 또는 Visual Studio의 솔루션, 프로젝트 파일)을 만들어낸다.

CMake를 이루는 개념 중에 가장 하위(lowest level)에 위치하는 것이 Source file이다. (당연한 이야기이겠지만,) source file은 실제 C/C++ 소스 파일을 지칭한다. Source file들은 한 개 또는 다수의 Target를 구성한다. Target은 빌드에 의해서 나오는 결과물, 즉 실행 파일 또는 라이브러리를 지칭한다. 하나의 target은 한 개 또는 다수의 source file로 이루어진다. Directory는 소스 트리에 있는 디렉토리를 말한다. Directory는 통상 CMakeLists.txt 파일을 갖고 있다. 모든 directory는 Local generator를 갖고 있는데, local generator는 실질적으로 Makefile이나 솔루션 또는 프로젝트 파일을 생성하는 역할을 수행한다. 모든 local generator는 Global generator를 공유하며, global generator는 플랫폼에 의존적인 정보들 또는 설정 값들을 담고 있다.

위 그림은 앞서말한 개념들의 관계도를 diagram으로 그린 것이다. 앞에서도 말했듯이 CMake의 대부분의 개념들은 C++의 class로 구현이 되어있기 때문에 그림에서는 실질적으로 어떤 역할을 하는 class를 중심으로 그림을 그렸다. 앞에서 설명 안한 class가 있는데 cmMakefile이다. cmMakefile 클래스는 local generator마다 하나씩 갖고 있으며 CMakeLists.txt를 읽고 파싱해 정보를 얻어와 속성값을 채운다. 몇몇 속성 값은 부모 디텍토리 cmMakefile 클래스로부터 가지고 온다. 실제 CMakeLists.txt에 쓰여진 대부분 명령어들은 cmMakefile 클래스의 속성을 채워 넣기 위함이라고 생각해도 될 듯 하다.

카테고리: CMake

1개의 댓글

ljh · 2019-03-26 9:08 오후

cmake공부중인데 잘정리되어있네요. 많은 도움되고 있습니다. 감사합니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다