Overview
autotools vs cmake
hello world for cmake
main.cpp
CMakeLists.txt
- 사용되는 cmake 버전
- Ubuntu 12.04는 ver 2.8까지 기본 지원한다.
- Ubuntu 16.04는 ver 3.5까지 기본 지원한다.
- doc: https://cmake.org/cmake/help/v3.10/command/cmake_minimum_required.html
- 프로젝트 이름.
- doc: https://cmake.org/cmake/help/v3.10/command/project.html
- Hello : 실행 binary name.
- doc: https://cmake.org/cmake/help/v3.10/command/add_executable.html
Makefile 생성
- console에서 "cmake . " 실행하면 Makefile이 실행된다.
- cmake 파라미터에는 CMakeLists.txt 파일이 있는 경로를
Shared library 만들기
utility.cpp
utility.h
CMakeLists.txt
- static library를 생성할 때는 SHARED 를 삭제하거나 STATIC 으로 변경한다.
- SHARED, STATIC 을 명시하지 않으면 기본으로 STATIC 으로 설정된다.
Makefile 생성하기
Shared library의 output path 설정하기
- 빌드완료한 후 output 파일들의 배치 규칙을 설정한다.
- doc: https://cmake.org/cmake/help/v3.10/command/install.html
Shared library 이용하여 App 작성하기
CMakeLists.txt (1)
- 빌드에 포함할 sub directory를 설정한다.
- doc: https://cmake.org/cmake/help/v3.10/command/add_subdirectory.html
CMakeLists.txt (2)
- include 파일 path 설정
- doc: https://cmake.org/cmake/help/v3.10/command/include_directories.html
- library path설정. LD_LIBRARY_PATH 설정하는 것임.
- doc: https://cmake.org/cmake/help/v3.10/command/find_library.html
- 실제 링크 옵션을 추가한다.
- doc: https://cmake.org/cmake/help/v3.10/command/target_link_libraries.html
32-bit build on 64-bit machine
ADD_LIBRARY 또는 ADD_EXECUTABLE 호출한 후에 SET_TARGET_PROPERTIES 를 사용하여 "-m32" flag를 설정한다.
- Creating libraries
- ADD_LIBRARY(utility SHARED utility.cpp)
- SET_TARGET_PROPERTIES(utility PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
- Creating executables
- ADD_EXECUTABLE(hello main.cpp)
- SET_TARGET_PROPERTIES(hello PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
Toolchain 변경하기
- cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.arm.cmake .
- toolchain.arm.cmake 파일내용
- 주의사항
- toolchain을 변경할 때 CMakeCache.txt 파일과 CMakeFiles 폴더를 삭제해야 반영됨
- toolchain 종류에 따라서 "-m32" flag 설정이 에러가 발생하는 경우가 있음.
Library version 설정하기
- VERSION 과 SOVERSION 을 설정하면 아래처럼 soft link 파일이 자동 생성된다.
- libutility.so.2.0.6
- libutility.so.0.0.0 (soft link)
- libutility.so (soft link)
Macro 만들기
- Macro 함수를 만들어 호출할 수도 있다.
TimeStamp string 생성
- $VERSION 변수에 date time format의 string을 생성함.
debug/release 빌드하기
- CMakeLists.txt 작성할 때 debug , release targe을 아래 처럼 추가한다.
- make release 또는 make debug 사용하여 빌드한다.
distclean target만들기
- cmake는 기본적으로 clean target만 지원하고 distclean target은 제공하지 않는다. 따라서 ADD_CUSTOM_TARGET 을 사용하여 distclean target을 추가해야 한다.
- make distclean 했을 때 삭제될 파일은 CMakeCache.txt와 CMakeFiles 폴더 이다.
CMake Variables
CMAKE_BINARY_DIR
- cmake 실행할 폴더 경로.
- sub project에서 모두 동일한 값.
CMAKE_SOURCE_DIR
- 최상위 CMakeLists.txt 파일이 위치한 폴더 경로.
- sub project에서 모두 동일한 값.
CMAKE_CURRENT_SOURCE_DIR
- CMakeLists.txt 파일이 위치한 폴더 경로.
- sub project 마다 경로가 다름.
CMAKE_CURRENT_BINARY_DIR
- cmake 실행할 폴더 하위에 생성되는 각 Project 폴더(CMakeLists.txt파일 존재)의 경로.
- sub project 마다 경로가 다름.
[CMAKE 실행시 사용할 수 있는 definitions]
CMAKE_TOOLCHAINT_FILE
- toolchain 변경할 때 사용함.
CMAKE_BUILD_TYPE
- "Debug" or "Release" 용 빌드시 사용함.
- default build type이 empty string이기 때문에 최상위 CMakeLists.txt 파일에 아래 코드를 추가하여 default로 debug 또는 release 용인지 명시하는 것이 좋다.
if (NOT CMAKE_BUILD_TYPE) message(STATUS "No build type selected, default to release") set(CMAKE_BUILD_TYPE "release") endif()
CMAKE_C_FLAGS
- gcc 컴파일 옵션을 설정한다. -m32 을 사용하면 32bit용으로 빌드할 수 있다.
CMAKE_CXX_FLAGS
- g++ 컴파일 옵션을 설정한다. -m32 을 사용하면 32bit용으로 빌드할 수 있다.
CMAKE_EXE_LINKER_FLAGS
- linker관련 옵션 설정
- static link 사용하는 예제
- set(CMAKE_EXE_LINKER_FLAGS "-static")
CMAKE_SHARED_LINKER_FLAGS
- shared library 만들때 사용할 link flag를 설정한다.
- symbol table 제거할때 -s 사용한다.
BUILD_SHARED_LIBS
- "ON" 을 설정하면 library 생성시 default으로 shared library 형태로 생성된다.
- 예) cmake -DBUILD_SHARED_LIBS=ON .

댓글
댓글 쓰기