CMake 사용 예제
개요
Kitware 사에서 만든 build 를 하기위한 meta build system으로등 다양한 빌드 환경을 위한 빌드 파일을 생성하는 유틸리티로 QT 의 qmake 와 비슷한 역할 수행하며 https://github.com/Kitware/CMake 에 소스가 공개되어 있음
장점
- autoconfig/automake 에 비해 사용이 편리
- 다양한 빌드 환경 지원( Makefile, Visual Studio, Xcode )
단점
- 문법이 맘에 안 듬(autoconf/automake 처럼 m4와 비슷한 문법)
- 온라인 문서 품질이 낮음
간단 사용법
CMakeLists.txt 파일을 만들고 빌드 규칙을 기술한 후에 cmake 를 구동하면 타겟 빌드 스크립트가 생성됨.
CMakeLists.txt
## cmake 최소 필요 버전 cmake_minimum_required (VERSION 2.8) ## 프로젝트명 project (HELLO) ## set(CMAKE_BUILD_TYPE Release) ## -D 로 전달할 pre defined macro 가 있을 경우 사용 add_definitions(-D__MY_DEFINED__) # Recurse into the "Hello" and "Demo" subdirectories. This does not actually cause another cmake executable to run. The same process will walk through the project's entire directory structure. add_subdirectory (Hello) add_subdirectory (Demo)
Find Package
컴파일에 필요한 라이브러리가 있는지 찾는 매크로
GNU MP
큰 수 연산을 처리하는 GMP library package. 아래 코드를 CMakeList.txt 에 넣거나 또는 CMake 의 Modules 폴더에 추가
##{ find GMP library set(GMP_PREFIX "" CACHE PATH "The path to the prefix of a GMP installation") find_path(GMP_INCLUDE_DIR gmp.h PATHS ${GMP_PREFIX}/include /usr/include /usr/local/include) find_library(GMP_LIBRARY NAMES gmp PATHS ${GMP_PREFIX}/lib /usr/lib /usr/local/lib) if(GMP_INCLUDE_DIR AND GMP_LIBRARY) get_filename_component(GMP_LIBRARY_DIR ${GMP_LIBRARY} PATH) set(GMP_FOUND TRUE) endif() if(GMP_FOUND) if(NOT GMP_FIND_QUIETLY) MESSAGE(STATUS "Found GMP: ${GMP_LIBRARY}") endif() elseif(GMP_FOUND) if(GMP_FIND_REQUIRED) message(FATAL_ERROR "Could not find GMP") endif() endif() ##} end
Ref