[CMake] 02. 설치 및 기본 문법

글쓴이 keunjun 날짜

1. 설치하기

Ubuntu의 경우에는 이미 설치가 되어있다. 만약에 다른 운영체제를 써서 CMake가 설치가 안되어 있는 경우에는 공식 홈페이지(https://cmake.org/download/)를 통해 다운로드할 수 있다. GUI 버전을 설치하고 싶은 경우 cmake-gui를 설치해야한다.

user@localhost:~$ sudo apt-get install cmake-qt-gui

(cmake-gui를 설치하려고 하면 알아서 cmake-qt-gui를 설치하라고 말해준다.)


2. CMake 간단 사용법

CMake를 사용하는 것은 매우 쉽다. 하나의 프로젝트는 한 개 또는 여러 개의 CMakeLists라는 파일(실제로는 CMakeLists.txt이나 설명할 때는 확장자 생략함)에 의해 빌드가 이루어진다. 즉, CMakeLists에는 빌드에 필요한 다양한 속성과 순서에 대한 정보가 간단한 언어에 의해 쓰여 있다. 일반적으로 CMakeLists는 폴더마다 하나씩 존재한다. (없을 수도 있다.) 아주 간단한 예로 다음과 같은 파일 트리를 들 수 있다.

MyCMakeProject
├── CMakeLists.txt
├── include
│   └── CMakeLists.txt
└── src
    └── CMakeLists.txt

빌드 하는 방법은 MyCMakeProject 폴더, 즉 소스 코드 폴더에서 터미널에 다음과 같이 친다.

user@localhost:~$ mkdir build
user@localhost:~$ cd build
user@localhost:~$ cmake ..
user@localhost:~$ make

이렇게 하면 MyCMakeProject에는 build라는 폴더가 만들어지고 ‘cmake ..’를 수행하면 그 안에 빌드에 필요한 각종 코드들이 생성되며 ‘make’하면 빌드가 시작된다. 좀 더 자세한 내용은 다음에 다루도록 한다.


3. CMake 기본 문법

CMakeLists는 주석과 명령어로 이루어져 있다. 주석은 ‘#’으로 시작한다. 명령어는 다음과 같은 형태를 갖는다.

command(args ...)

command는 명령어의 이름이 들어가고, args는 인자들로 공백 문자로 나뉜다. Script 언어처럼 모든 명령어는 명령어가 쓰인 순서대로(하나의 파일에서는 위에서 아래 방향으로) 실행된다. 모든 명령어 이름은 대소문자를 구분하지 않는다.

CMake 명령어에 쓰이는 인자들은 따옴표와 함께 쓰이거나 쓰이지 않을 수 있다. 따옴표와 함께 쓰이는 경우에는 처음과 끝에 쌍 따옴표를 붙이며, (쓰이는 그 순간에는) 항상 인자 하나로 생각한다. (그러나 나중에 변수에 값으로 쓰이는 경우, 여러 개의 인자로 생각되는 경우도 있다. 나중에 예제를 통해서 알아본다.) 조심해야 하는 경우는 인자에 쌍 따옴표 문자를 넣고 싶은 경우 ‘\’와 함께 (\”처럼) 써야 한다. 따옴표를 쓰지 않는 인자들은 띄어쓰기 또는 세미콜론에 의해서 인자를 구분한다.

command("") # 인자 갯수: 1개
command("a b c") # 인자 갯수: 1개
command("a;b;c") # 인자 갯수: 1개
command("a" "b" "c") # 인자 갯수: 3개
command(a b c) # 인자 갯수: 3개
command(a;b;c) # 인자 갯수: 3개 (1개 처럼 보이지만 실제로는 3개)

CMake는 문자열을 변수에 저장할 수 있는 기능을 제공한다. set()이라는 명령어를 이용하면 변수에 다양한 값들을 저장할 수 있다. set 함수의 첫 번째 인자는 변수명이고 나머지 인자는 변수에 저장될 값 들이다. 1개 이상의 값들이 변수에 저장되는 경우에는 세미콜론을 구분자로 하여 문자열로 변수에 저장이 된다. 그리고 변수에 저장된 값을 사용할 때는 ${ . }를 이용한다. 예를 들어 변수명이 VAR인 경우 VAR에 저장된 값을 불러올 때는 ${VAR}처럼 쓰면 된다. 이때 문자열에 세미콜론이 있으면 세미콜론은 구분자로하여 변수들을 나눠 여러 개의 인자처럼 쓴다.

set(VAR "") # VAR = ""
set(VAR a) # VAR = "a"
set(VAR "a b c") # VAR = "a b c"
set(VAR a b c) # VAR = "a;b;c"
set(VAR "a;b;c") # VAR = "a;b;c"
set(VAR a;b;c) # VAR = "a;b;c"

위의 예제를 보면 알 수 있다시피 set (VAR a b c), set (VAR “a;b;c”) 그리고 set (VAR a;b;c)의 결과가 같은 것을 알 수 있다. “a;b;c”는 set 함수 입장에서는 하나의 인자에 불과하지만 실제로 ${VAR}에 의해서 쓰이는 경우에는 a, b 그리고 c 이렇게 3개의 인자처럼 쓰인다.

카테고리: CMake

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다