CMake 익히기 : 기초문법 (2)
작성 배경
CMake의 가장 큰 장점은 C/C++ 크로스 플랫폼에 빌드를 할 수 있다. 그러나 임베이디드의 대부분을 차지하는 리눅스 환경의 경우 적당한 빌드 시스템이 CMake만한게 없다는 것도 함정이다. 또한 다른 사람이 만들어 놓은 것을 사용하기는 쉽지만, 막상 규모가 조금 되는 프로그램을 만들려고 하면, 쉽지 않다. 이 때문에 간단하게나마 문법을 조금씩 정리한다.
CMake 기초문법
end가 붙은 키워드의 arg
end키워드가 붙은 경우(endif, endfunction, endmacro, while, 등)에 앞의 arg를 동일하게 적어 줘서 여러 키워드가 중첩이 될 경우 구분할 수 있는 역할을 할 수 있다. 하지만 붙이지 않아도 된다.
매크로(macro)
CMake에서 매크로는 문법상 함수와 동일하다. 다만, 동작 방식에서 차이가 있다. 함수의 경우 메모리에 동적으로 생성되어 작동하는 반면 매크로는 C의 매크로처럼 호출 부분에 작성되어 있는 절차를 삽입하는 방식이다.
macro(hello_macro)
message("hello world")
endmacro(hello_macro)
hello_macro()
조건문(if)
조건문 if()도 마지막에는 endif()로 끝이 나야 한다. if()조건 외 실행할 경우 else()가 사용된다. if()외에 다른 조건을 정의 할때는 elseif()를 사용한다.
조건문이 참이 되는 경우는 ON, YES, Y, TRUE, 또는 0이 아닌 값이다. 반면 거짓이 되는 경우는 0, OFF, NO, FALSE, N, IGNORE, ""이다.
또한 조건문에서 함께 사용되는 비교, 논리 연산자의 경우 기호가 아닌 대문자 키워드로 표현을 한다. 비교 연산자 : EQUAL, LESS, GREATER
논리 연산자 : AND, OR, NOT
기타 매칭 : MATCHES [REGEX]
set(VAL 1)
if(${VAL})
message("${VAL} is TRUE")
else()
message("${VAL} is FALSE")
endif()
include()
확장자가 cmake로 작성된 다른 cmake 파일을 포함시킬 수가 있다. C/C++의 include와 유사하다. 다만, 표준라이브러리가 없어서 로컬에서 포함을 해야 한다. 대부분 오픈소스에는 cmake라는 폴더에 .cmake 파일을 모아 놓는다.
include하게 되면, include된 파일에 있는 매크로나 함수, 변수를 사용할 수 있다.
연습예제
앞에서 간단하게 살펴본 내용으로 간단하게 실습 예제를 작성해보자. 스크립트를 2개로 만들어서 실행해보자
# cmake폴더의 macro.cmake 파일
macro(check_val_macro val)
if(${val})
message("${val} is true")
else()
message("${val} is false")
endif()
endmacro(check_val_macro val)
# 작업 폴더의 CMakeLists.txt 파일
cmake_minimum_required(VERSION 2.6)
include(cmake/macro.cmake)
set(FOO 1)
check_val_macro(FOO)
set(FOO FALSE)
check_val_macro(FOO)
결과는 다음과 같이 나온다
참고자료
OpenCV 소스코드의 CMake스크립트
Mastering CMake A Cross-Platform Build System 서적
'각종 툴' 카테고리의 다른 글
[PyCharm]기본 키 맵 해제 (0) | 2020.12.20 |
---|---|
CMake 익히기 : 기초문법 (1) (0) | 2018.02.19 |
CMake : 공식예제 step1 해보기 (0) | 2017.12.11 |