강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급: 플랫폼과 컴파일러 독립적인 설정파일사용하는 컴파일과정제어하는 cmake

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 플랫폼과 컴파일러 독립적인 설정파일사용하는 컴파일과정제어하는 cmake

 

cmake

 

 

cmake는 크로스 플랫폼 오픈소스 make 시스템으로서, 간단한 플랫폼과 컴파일러 독립적인 설정 파일을 사용하여 소프트웨어 컴파일 과정을 제어하기 위해 사용된다.

 

 

 

cmake는 선택한 컴파이러 환경에서 사용될 수 있는 makefile들과 작업 공간을 제공한다.

 

 

 

make가 간단한 문법, 매크로 및 레이블을 사용하는 것에 대해 cmake는 변수와 함수를 포함하는 복합적인 문법을 사용하여 비교적 다양하고 구체적인 설정이 가능하도록 한다.

 

 

 

 

cmake는 리눅스뿐만 아니라 Mac OS X, IRIX, AIX 등의 유닉스, 윈도우즈 등에서 사용할 수 있다.

 

 

 

그리고 cmakeMySQL 5.5.x부터 make를 대신하여 사용되고 있고 이외에도 MariaDB, KDE, Qt5, libpng, zlib, Blender, KiCad, LLVM Clang 등에서 사용되고 있다.

 

 

 

 

1) cmake의 설치

 

 

cmake는 리눅스 배포판에서 기본 제공하지 않는 경우가 많은데, 이 경우에는 직접 설치해서 사용해야 한다.

 

 

 

다음과 같이 한다.

 

 

 

설치의 예는 “7.1. 웹 관련 서비스부분에 기술되어 있다.

 

 

 

 

 

 

 

 

# ./configure

 

# make

 

# make install

 

 

 

 

 

 

2) cmake의 문

 

 

프로그램의 소스코드와 함께 CMakeLists.txt 파일을 제공하는데, 이 파일에 포함되는 각각의 명령은 다음과 같은 형태이다.

 

 

 

 

 

 

 

 

 

command (args ...)

 

 

 

 

 

 

 

cmake의 기본 데이터 타입은 스트링(string)이고, 스트링의 목록을 지원한다.

 

 

 

각 스트링은 세미콜론(;)에 의해 구분될 수 있다.

 

 

 

다음은 변수 VARa, b, c로 지정한 것인데, 아래와 위의 표현이 모두 동일한 표현이다.

 

 

 

 

 

 

 

 

set (VAR a;b;c)

set (VAR a b c)

 

 

 

 

 

 

 

다음과 같이 변수를 적용해 본다.

 

 

 

다음은 Foo라는 변수를 “a b c”로 지정했고 명령에 이 변수를 적용하여 “command (c b c)”와 동일한 효과를 냈다.

 

 

 

만약 command(“${Foo}”)와 같이 변수를 적용할 때 따옴표를 달면 “a b c”를 하나의 아큐먼트로 인식한다.

 

 

 

 

 

 

 

 

set (Foo a b c)

command(${Foo})

 

 

 

 

 

 

 

 

cmakeif, foreach, while, 매크로(macro) 함수(function)를 지원한다.

 

 

 

 

 

if 문의 예

 

 

 

 

# some_command will be called if the variable's value is not:

# empty, 0, N, NO, OFF, FALSE, NOTFOUND, or -NOTFOUND.

if(var)

some_command(...)

endif(var)

 

 

 

 

 

 

 

foreach 문의 예

 

 

 

 

set(VAR a b c)

# loop over a, b,c with the variable f

foreach(f ${VAR})

message(${f})

endforeach(f)

 

 

 

 

 

매크로(macro) 함수(function)의 예

 

 

 

 

# define a macro hello

macro(hello MESSAGE)

message(${MESSAGE})

endmacro(hello)

# call the macro with the string "hello world"

hello("hello world")

# define a function hello

function(hello MESSAGE)

message(${MESSAGE})

endfunction(hello)

 

 

 

 

 

 

 

 

그리고 cmakeQuote, String Escape를 사용할 수 있고, ^, $, ., [ ], [^ ], [-], *, +, ?, ()의 정규 표현식을 지원한다.

 

 

 

 

이외에 cmake 파일의 구체적인 작성법은 http://www.cmake.org 에서 제공하는 책자, 튜토리얼, FAQ 등을 참조하기 바란다.

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,854 개
  • 현재 접속자 :  122 명