개발/개발 환경

[개발 환경] CMake 프로젝트 구성하기 - 다양한 변수들

growing-dev 2023. 2. 1. 22:46

CMake 프로젝트 구성하기 - 다양한 변수들

CMake는 다양한 변수들을 제공한다. 프로젝트를 구성할 때 해당 변수들을 잘 활용해서 명령어와 스크립트를 구성하면 효율적이고 유지보수에 좋은 프로젝트를 구성할 수 있다.수많은 명령어 중에서 자주 사용될 만한 것을 선정해 보았고 실제로 출력해 보면서 어떤 용도로 사용할지 생각해 보았다. 여러 카테고리로 나누어져 있고, 그 카테고리에 맞게 분류해서 정리해 본다.

https://cmake.org/cmake/help/latest/manual/cmake-variables.7.html

 

cmake-variables(7) — CMake 3.25.2 Documentation

This page documents variables that are provided by CMake or have meaning to CMake when set by project code. For general information on variables, see the Variables section in the cmake-language manual. Note CMake reserves identifiers that: begin with CMAKE

cmake.org

 

 

Variables that Provide Information

정보를 제공하는 변수로 주로 현재 프로젝트에 적용된 이름과 디렉토리를 출력한다. 이 값들은 프로젝트나 사람에 따라 상대경로로 작용하기 때문에 절대 경로나 고정된 이름이 아니라 변수들을 잘 활용하면 유지보수에 좋은 구조를 만들 수 있다.

 


CMAKE_BINARY_DIR, 
CMAKE_SOURCE_DIR, 
CMAKE_CURRENT_BINARY_DIR,
CMAKE_CURRENT_SOURCE_DIR

message(${CMAKE_BINARY_DIR})
message(${CMAKE_SOURCE_DIR})
message(${CMAKE_CURRENT_BINARY_DIR})
message(${CMAKE_CURRENT_SOURCE_DIR})

CMAKE의 바이너리 디렉토리, 소스 디렉터리를 얻어 올 수 있는 변수들이다.

CURRENT가 붙는 것은 현재 프로세싱 중인 타깃의 정보이고, CURRENT가 안 붙은 것들을 CMake상 Top-level에 해당하는 것이다. 일반적으로 구성하는 적당한 수준의 프로젝트는 붙나 안 붙나 비슷한 것으로 보인다.

 


CMAKE_COMMAND

CMake가 실행될 cmake의 실행 위치를 저장한다.

message(${CMAKE_COMMAND})



CMAKE_PROJECT_NAME

프로젝트 이름을 저장한다. project() 에 명시한 이름으로, my_test_project가 출력된다.

project(my_test_project LANGUAGES CXX VERSION 0.1.0)
message(${CMAKE_PROJECT_NAME})

 

Variables that Change Behavior

실제 CMake 동작을 바꿀 수 있는 변수들이다.


BUILD_SHARED_LIBS

해당 변수는 ON 으로 설정할 수 있으며 add_library 시에 정적 라이브러리로 만들지 공유 라이브러리로 만들지를 결정하는 변수이다. ON이면 공유 라이브러리고, 아니면 기본은 정적 라이브러리로 만든다.

 

file(GLOB SRC
    "src/*.cpp" "src/*.c")

add_library(my_test_project ${SRC})

설정하지 않은 경우 libmy_test_project.a 로 정적 라이브러리로 빌드됨을 알 수 있다.

 

아래와 같이 BUILD_SHARED_LIBS를 ON으로 설정한 경우 libmy_test_project.so로 빌드됨을 알 수 있다.

file(GLOB SRC
    "src/*.cpp" "src/*.c")
set(BUILD_SHARED_LIBS ON)
add_library(my_test_project ${SRC})



CMAKE_BUILD_TYPE

빌드 타입을 지정하는 변수로 Debug, Release와 같이 지정 가능하다. 정확하진 않지만 특별히 지정해 주지 않으면 Debug로 설정되는 것으로 보인다.

message(${CMAKE_BUILD_TYPE})

 



Variables for Languages

언어별로 설정할 수 있는 변수들이다.


CMAKE_C_STANDARD
CMAKE_CXX_STANDARD

C, C++의 Standard를 설정할 수 있는 명령어이다. C89/C90, C99, C11, C++98, C++11 등이 지정 가능하다

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)


CMAKE_<LANG>_COMPILER
CMAKE_<LANG>_FLAGS

complier와 flag를 지정할 수 있는 명령어이다.

크로스 컴파일 하거나 프로젝트 내에 여러가지 언어로 빌드하길 원할 때 컴파일러를 지정할 수 있고, 그에 따라 필요한 flag들을 언어에 맞게 설정할 수 있다.

 

 

반응형