콘텐츠로 이동

CMake 열 시트

제품정보

CMake는 플랫폼 의존 구성 파일을 사용하여 기본 빌드 도구 파일 (Makefiles, Visual Studio 프로젝트, Xcode 프로젝트 등)를 생성하는 크로스 플랫폼 빌드 시스템 생성기입니다.

설치하기

패키지 관리자

카지노사이트

기본 개념

제품 정보

카지노사이트

프로젝트 구조

카지노사이트

기본 CMakeLists.txt

Minimal 예제

카지노사이트

간단한 도서관

카지노사이트

변수

내장 변수

카지노사이트

변수 설정

카지노사이트

제품정보

실행하기

카지노사이트

회사 소개

카지노사이트

대상 속성

카지노사이트

패키지 찾기

사이트맵

ο 회원 관리

pkg 구성

카지노사이트

상태 논리

if/else/endif의 경우

카지노사이트

옵션 정보

카지노사이트

기능 및 매크로

제품정보

카지노사이트

로그아웃

카지노사이트

고급 기능

카지노사이트

제품정보

CTest 통합

카지노사이트

Google 테스트 통합

카지노사이트

설치하기

기본 설치

오프화이트

패키지 구성

카지노사이트

발전기 Expressions

기본 발전기 Expressions

오프화이트

고급 발전기 Expressions

카지노사이트

명령 선 사용법

기본 명령

카지노사이트

구성 옵션

카지노사이트

고급 사용

카지노사이트

Cross-Platform 개발

플랫폼 감지

카지노사이트

Toolchain 파일

카지노사이트

최고의 연습

프로젝트 구조

```cmake cmake_minimum_required(VERSION 3.15)

project(MyProject VERSION 1.0.0 DESCRIPTION "My awesome project" LANGUAGES CXX )

Only do these if this is the main project

if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) set(CMAKE_CXX_EXTENSIONS OFF) set_property(GLOBAL PROPERTY USE_FOLDERS ON)

include(CTest)
if(BUILD_TESTING)
    add_subdirectory(tests)
endif()

endif()

Add subdirectories

add_subdirectory(src) add_subdirectory(external) ```의 경우

현대 CMake 패턴

```cmake

Use target-based approach

target_include_directories(mylib PUBLIC $ $ )

Use imported targets

find_package(Threads REQUIRED) target_link_libraries(myapp PRIVATE Threads::Threads)

Use generator expressions

target_compile_features(myapp PRIVATE cxx_std_17)

Avoid global commands

Don't use: include_directories(), link_directories(), add_definitions()

Use target-specific commands instead

```에 대하여

오류 처리

```cmake

Check CMake version

cmake_minimum_required(VERSION 3.15)

Validate variables

if(NOT DEFINED PROJECT_VERSION) message(FATAL_ERROR "PROJECT_VERSION must be defined") endif()

Check for required files

if(NOT EXISTS "$\\{CMAKE_CURRENT_SOURCE_DIR\\}/src/main.cpp") message(FATAL_ERROR "main.cpp not found") endif()

Validate options

| if(BUILD_TYPE AND NOT BUILD_TYPE MATCHES "^(Debug | Release | RelWithDebInfo | MinSizeRel)$") | message(FATAL_ERROR "Invalid BUILD_TYPE: $\\{BUILD_TYPE\\}") endif() ```의 경우

관련 링크

Debug 출력

```cmake

Print variables

message(STATUS "CMAKE_BUILD_TYPE: $\\{CMAKE_BUILD_TYPE\\}") message(STATUS "CMAKE_CXX_COMPILER: $\\{CMAKE_CXX_COMPILER\\}")

Print all variables

get_cmake_property(_variableNames VARIABLES) foreach(_variableName $\\{_variableNames\\}) message(STATUS "$\\{_variableName\\}=$\\{$\\{_variableName\\}\\}") endforeach()

Print target properties

get_target_property(MYAPP_SOURCES myapp SOURCES) message(STATUS "myapp sources: $\\{MYAPP_SOURCES\\}") ```에 대하여

문제 해결

```bash

Verbose makefile

cmake -S . -B build -DCMAKE_VERBOSE_MAKEFILE=ON

Debug find_package

cmake -S . -B build --debug-find

Trace execution

cmake -S . -B build --trace

Debug output

cmake -S . -B build --debug-output ```의 경우

지원하다