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
\(<BUILD_INTERFACE:\)\\{CMAKE_CURRENT_SOURCE_DIR\\}/include>
$
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 ```의 경우
지원하다¶
- ** 공식 문서**: cmake.org/documentation
- ** 케이크 자습서 ** : [cmake.org/cmake/help/latest/guide/tutorial] (LINK_4)
- **Modern CMake **: cliutils.gitlab.io/modern-cmake
- ** CMake 예제 **: github.com/ttroy50/cmake-examples