양은성 강사님의 CPP 가이드라인에 대한 수업 마지막 날이다. CMake와 빌드 시스템, CMakeLists.txt를 어떻게 작성하는지와 작성할 때의 꿀팁 등을 공부했다.
CMake는 C++로 기술된 프로젝트를 빌드하기 위한 빌드 시스템이다. CMakeLists.txt라는 파일에 빌드할 정보를 지정하면 사용자가 원하는 대로 빌드를 진행한다.
CMakeLists에는 다음과 같은 방식을 통해 작성할 수 있다.
# 사용할 CMake의 최소 버전을 지정한다.
set_minimum_required(VERSION 3.11)
# 프로젝트의 이름, 버전, CPP 프로젝트임을 지정한다.
project(CMAKE_GROUND VERSION 1.1.0 LANGUAGES CXX)
# 변수를 지정한다.
set(STRING_VARIABLE "Hello World")
set(BOOL_VARIABLE FALSE)
# 전역 변수를 지정해, 상위 CMakeLists.txt에서도 사용할 수 있다.
set(STRING_VARIABLE "Hello World" CACHE STRING "Global string variable")
set(BOOL_VARIABLE FALSE CACHE BOOL "Global bool variable")
# ${}를 통해 지정한 변수를 불러올 수 있다.
message(STATUS "String Variable: ${STRING_VARIABLE})
# 하위 폴더의 CMakeList.txt를 불러올 수 있다.
add_subdirectory(example)
# 소스로부터 실행 파일을 생성한다.
add_executable(TARGET_NAME ${OPTION} source1, source2, ...)
# 소스로부터 정적, 동적, 모듈 라이브러리를 생성한다.
add_libarary(TARGET_NAME ${TYPE} source1, source2, ...)
# add_executable, add_library로 생성된 target에 라이브러리를 연결한다.
target_link_library(TARGET_NAME ${OPTION} LIBRARY1, LIBRARY2, ...)
# 특정 target의 헤더 파일을 지정
target_include_directory(TARGET_NAME ${OPTION} header1, header2, ...)
# Target의 컴파일 옵션을 지정
target_compile_option(TARGET_NAME ${OPTION} option1, option2, ...)
# Target의 컴파일 전처리기(#if #endif 등)를 정의하기 위한 구문
target_compile_definitions(TARGET_NAME ${OPTION} option1, option2, ...)
# 설치 규칙 정의
install(TARGETS TARGET1 TARGET2 ... ${OPTION})
# if문
if(condition)
...
elseif(condition)
...
else()
...
endif()
CMake에 대한 주요 내용들을 정리해봤다. 사실 CMakeLists.txt는 사람이 사용하는 환경에 따라 작성되는 구문이 극과 극으로 바뀌는 특징이 존재한다. 하지만, 위의 구문들은 대부분의 CMakeLists.txt에 포함하고 있고, ROS를 사용하기 위해서는 CMake에 대한 어느정도 이해가 필요하다.
아직은 기초적인 내용이라 어려운 점은 없다. 학부 때 공부했던 내용이기에 복기하듯이 공부했다.
아직은 궁금한 점은 없었다.
3일간 진행한 CPP 가이드라인 수업에서 다양한 꿀팁을 얻을 수 있었다. 이전에 C++ 관련 프로젝트나 ROS를 사용해본 경험, 학부 때 공부해본 경험이 있기에 수업을 따라가는데 크게 어려움은 없었다. CMakeLists.txt에 대해서도 이전에 공부해본 경험이 있어서 어렵지 않았고, 기억을 되돌아보며 수업에 임했다.
📌 프로그래머스 데브코스 6기 자율주행 인지과정(Perception) 수강 내용을 바탕으로 정리한 TIL 입니다.
📅 Today: 2023. 9.27.