이 특징은 CMake의 핵심 개념에 대한 소개를 제공한다
당신이 CMake를 가지고 일을 시작할 때 타겟, 발생기(generator) 그리고 명령어와 같은 개념의 다양성으로 간다
CMake에서 이 개념들은 C++ 클래스들로 구현되고 CMake의 명령어들의 대다수가 참조된다
이 개념을 이해하는 것은 당신에게 효과적인 CMakeLists 파일을 생성할 필요가 있는 지식을 제공할 것이다
CMake의 클래스에 대해 더 자세히 들어가기 전에, 그것들의 기본 관계를 이해하는 것은 가치있다
가장 낮은 레벨에는 소스 파일이 있다 이것은 전형적인 C 또는 C++ 소스 코드 파일에 대응한다
소스 파일은 타겟으로 합쳐진다
타켓은 전형적으로 실행파일이나 라이브러리이다
디릭토리는 소스 트리에서 디렉토리를 나타내고 전형적으로 CMakeLists 라이브러리를 갖고 하나 또는 그 이상의 타겟이 그것에 연관되어 있다
모든 디렉토리는 지역 발생기를 갖는데 Makefiles 나 그 디렉토리에 대해 프로젝트 파일을 생성하는 것에 책임이 있다
지역 발생기의 모두는 빌드 과정을 감독하는 공통 전역 발생기를 공유한다
마지막으로, 전역 발생기는 생성되고 cmake 클래스 그 자체로 유도된다
CMake에서 각 명령어는 구별된 C++ 클래스로 구현되고, 두 개의 주요 부분을 갖는다
명령어의 첫 번째 부분은 InitialPass 메서드이다
InitialPass 메서드는 전달인자와 현재 진행되는 디렉토리에 대한 cmMakefile 객체를 받고, 그리고 나서 그것의 연산을 수행한다
set 명령어의 경우에 그것의 전달인자를 진행하고 만약 전달인자가 정확하다면 cmMakefile에서 변수로 설정하기 위해 메서드를 호출한다
명령어의 결과는 항상 cmMakefile 객체에 저장된다 정보는 결코 명령어에 저장되지 않는다
명령어의 마지막 부분은 FinalPass 이다
명령어의 FinalPass는 모든 명령어가 (전체 CMake 프로젝트에 대해) 그들의 InitialPass를 호출한 후에 실행된다
대부분의 명령어는 FinalPass를 갖지 않지만, 어떤 드문 경우에 명령어는 초기 패스 동안 가능하지 않을 수도 있는 전역 정보를 가진 어떤 것을 해야만 한다
일단 CMakeLists 파일들 전부 진행되면 발생기는 타겟 빌드 시스템에 대해 적절한 파일을 생성하기 위해 cmMakefile 객체로 수집된 정보를 사용한다
댓글