[개발 환경] CMake 프로젝트 구성하기 - 프로젝트 관련 명령어들

2023. 1. 30. 22:44·개발/개발 환경
반응형

CMake 프로젝트 구성하기 - 프로젝트 관련 명령어들

 

이 전 포스팅에서 스크립트 관련 명령어들을 알아보았다.

이번에는 프로젝트를 구성할 때 필요한 명령어들을 알아보겠다.

스크립트 명령어가 기본적이고 베이스가 되는 명령어라면, 프로젝트 명령어를 통해서 실제 라이브러리나 프로그램을 만든다고 할 수 있겠다. 또 의존성이나 캡슐화를 프로젝트 구조적인 측면에서부터 할 수 있는 장점이있다.

 

Project Commands

 

add_compile_definitions

소스를 컴파일할 때 preprocessor 에 추가되는 define을 추가하는 명령어이다.
이렇게 추가를 하면 COMPILE_DEFINITIONS 라는 변수에 추가가 되고 이를 get_property를 통해 읽을 수 있다.
add_compile_definitions(DEBUG=TRUE VALUE=1)

get_directory_property(VAL COMPILE_DEFINITIONS)
message(STATUS "Compile definitions: ${VAL}")
결과

 

add_custom_command

아래와 같이 특정 툴을 이용해서 빌드하거나 빌드할 때 특별히 지정해야 될 포맷이 있거나 할 때 사용하는 명령어이다.

명령어 이름에 맞게 일괄적으로 적용되는 것이 아니고 custom할 수 있는 기능이다.

아래는 공식 문서에서 지정해준 예시이다.

add_custom_command(
  OUTPUT out.c
  COMMAND someTool -i ${CMAKE_CURRENT_SOURCE_DIR}/in.txt
                   -o out.c
  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/in.txt
  VERBATIM)
add_library(myLib out.c)

 

add_dependencies

add_dependencies(<target> [<target-dependency>]...)

top-level target간의 의존성을 지정하는 명령어이다. 여기서 top-level 이란 install 등으로 설치한 패키지가 아니라 add_executable이나 add_library와 같이 CMakeList.txt로 빌드된 target을 의미한다.

의존 대상들을 먼저 빌드하고(보장하고) 그 다음 target을 빌드하는 식으로 동작한다.

 

 

add_executable

add_executable(<name> [WIN32] [MACOSX_BUNDLE]
               [EXCLUDE_FROM_ALL]
               [source1] [source2 ...])

빌드 결과 나오는 산출물을 지정하는 명령어이다. 최종 결과물을 실행파일로 생성하는 명령어이다.

가장 기본적이고 필수적인 명령어라고 할 수 있겠다.

윈도우면 .exe로 나올 것이고 리눅스면 확장자가 없는 실행파일로 나올 것이다.

file(GLOB SRC
    "src/*.cpp" "src/*.c")
    
add_executable(my_test_project ${SRC})

실행파일 my_test_project 가 생성되었다.
그 자체로 실행하였다.

 

add_library

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [<source>...])

빌드 결과 나오는 산출물을 지정하는 명령어이다. 최종 결과물을 라이브러리로 생성하는 명령어이다.

STATIC과 SHARED로 지정할 수 있다. .a나 .lib로 산출물이 나올 것이다.이 또한 add_executable과 함께 없어서는 안되는 명령어이다.

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

add_library(my_test_project ${SRC})

libmy_test_project.a 가 생성되었다.

 

 

target_include_directories

target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

주어진 target을 빌드할 때 필요한 헤더파일이 포함된 디렉토리를 추가할 때 필요한 명령어이다. 빌드할 때 #include로 포함시킨 파일의 위치를 제대로 검색할 수 있도록 포함시켜주어야 한다.PUBLIC과 PRIVATE을 지정해서 추가해 주는게 좋다. 이를 활용해서 불필요한 의존성을 사전에 예방할 수 있다.

 

 

target_link_libraries

target_link_libraries(<target>
                      <PRIVATE|PUBLIC|INTERFACE> <item>...
                     [<PRIVATE|PUBLIC|INTERFACE> <item>...]...)

target에 포함할 라이브러리를 추가할 때 사용하는 명령어이다. 라이브러리의 prefix나 확장자 등은 제거하고 추가해 준다.

역시 PUBLIC과 PRIVATE를 지정해주면서 라이브러리의 scope를 지정하고 의존성을 관리할 수 있는 좋은 수단이 된다.

저작자표시 비영리 변경금지

'개발 > 개발 환경' 카테고리의 다른 글

[개발 환경] 구글 테스트(googletest) 개념 및 예제  (0) 2023.02.05
[개발 환경] CMake 프로젝트 구성하기 - 다양한 변수들  (2) 2023.02.01
[개발 환경] CMake 프로젝트 구성하기 - 스크립트 관련 명령어들  (0) 2023.01.29
[개발 환경] CMake 최신 버전 설치하기  (1) 2023.01.29
[개발 환경] CMake 프로젝트 구성 및 명령어들 (feat. VS Code)  (2) 2023.01.27
'개발/개발 환경' 카테고리의 다른 글
  • [개발 환경] 구글 테스트(googletest) 개념 및 예제
  • [개발 환경] CMake 프로젝트 구성하기 - 다양한 변수들
  • [개발 환경] CMake 프로젝트 구성하기 - 스크립트 관련 명령어들
  • [개발 환경] CMake 최신 버전 설치하기
growing-dev
growing-dev
S/W 개발 관련 내용들과 취미나 육아, 맛집 등 관심 있는 내용을 공유하는 블로그입니다.
    반응형
  • growing-dev
    성장하는 개발자 블로그
    growing-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 개발
        • 개발 공통
        • 개발 환경
        • Git
        • 자료구조, 알고리즘
        • C, C++
        • Python
        • DevOps
        • CMake
      • 공부
        • 영어
        • 경제
      • 취미, 육아 N
        • 육아
      • 생활정보
  • 블로그 메뉴

    • 홈
  • 링크

    • growing-dev GitHub
  • 공지사항

    • [블로그 시작] 성장하는 개발자 스토리입니다.
  • 인기 글

  • 태그

    오픽
    TDD
    오블완
    티스토리챌린지
    Clang
    git
    소프티어
    프로그래머스
    WSL
    앨리웨이
    생산성
    VS Code
    OPIC
    C++
    필스너
    하이볼
    키즈카페
    CMake
    Python
    dfs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
growing-dev
[개발 환경] CMake 프로젝트 구성하기 - 프로젝트 관련 명령어들
상단으로

티스토리툴바