지금까지 CMake의 기본 개념들에 대해서 배웠다. 이제부터는 실제로 CMake를 사용하기 위해서 간단한 문법들과 CMakeLists 작성 방법에 대해서 알아보도록 한다.
1. 프로젝트 기본 설정
우리가 CMake을 사용하는 이유에 대해서 다시 한 번 상기해 보자. CMake는 우리가 구현한 프로젝트를 다양한 플랫폼에서도 빌드 할 수 있게 도와주는 소프트웨어이다. 프로젝트가 외부 라이브러리를 사용하는 경우에 플랫폼마다 라이브러리를 저장하고 있는 위치가 다르므로 CMake가 없다면 일일이 플랫폼에 맞게 바꿔줘야 하지만 CMake는 알아서 설정해준다. 하지만 CMake가 모든 걸 자동으로 해줄 순 없다. 그렇기 때문에 우리는 CMake가 무엇을 자동으로 할 수 있고 무엇을 자동으로 할 수 없는지 정확하게 알아야 한다. 설정이 필요한 부분은 설정을 잘 해줘야만 사용자의 의도대로 잘 동작한다. CMakeLists 파일 작성은 project() (doc) 함수를 부르면서 시작한다. 일반적으로 최상위 CMakeLists 파일에는 project() 함수가 존재하며 프로젝트의 이름과 이 프로젝트(소스코드)가 어떤 언어로 작성되어 있는지를 CMake에게 알려준다.
project(MyCMakeProject C)
위의 예제는 프로젝트 이름을 MyCMakeProject으로 하고 소스코드는 C언어로 되어있다는 것을 의미한다. C 대신에 CXX, Fortran, NONE이 들어 갈 수 있으며 만약에 아무것도 쓰지 않으면 자동으로 C 또는 C++ 언어로 설정이 된다.
2. 하위 디렉토리 추가
일반적으로 프로젝트 폴더를 살펴보면 소스 코드가 있는 src 폴더와 헤더 파일이 있는 include 폴더가 존재한다. (물론 그렇지 않을 수도 있다.) 이렇게 프로젝트의 디렉토리 구조는 단순하게 한층으로 구성되어 있지 않고 하위 디렉토리들이 많이 존재한다. 이런 경우에 CMakeLists 파일에 하위 디렉토리를 포함하라는 명령을 명시적으로 넣어야 한다. 그 때 쓰는 명령어가 add_subdirectory() (doc)이다.
3. 문자열과 리스트
CMake에서 가장 중요한 자료형 두개를 뽑으라면 문자열과 리스트라고 말할 수 있다. 라이브러리/파일의 이름과 경로는 문자열로 저장되며 문자열 여러개를 하나의 변수에서 표현 하고 싶을 때 리스트를 쓴다. CMake는 문자열과 리스트를 사용자들이 좀 더 편하게 사용할 수 있도록 여러 함수를 만들어 놓았다. string() (doc) 함수는 함수 이름에서부터 알 수 있다시피 문자열과 관련된 함수로 문자열을 이어 붙이거나 찾거나 바꾸거나 할 때 사용 할 수 있다. 자세한건 document를 통해서 확인하자.
string(REPLACE "b" "c" RESULT "bmake") # cmake
위의 예제는 주어진 문자열(bmake)에서 b를 찾아 c로 바꿔 그 결과를 RESULT에 넣어준다. 리스트에 관련된 함수는 list() (doc), remove() (doc) 그리고 separate_arguments() (doc)가 있다.