CMake
CMake| 개발자 | 앤디 세딜닉, 빌 호프만, 브래드 킹, 켄 마틴, 알렉산더 노이도르프 |
|---|---|
| 초기 릴리즈 | 전 |
| 안정된 릴리스 | 3.23[1].3 / 2022년 7월 28일 |
| 저장소 | |
| 기입처 | C, C++[2] |
| 운영 체제 | 크로스 플랫폼 |
| 유형 | 소프트웨어 개발 도구 |
| 면허증. | BSD-3-Clause |
| 웹 사이트 | cmake |
소프트웨어 개발에서 CMake는 컴파일러에 의존하지 않는 [3]방법을 사용하여 소프트웨어의 빌드 자동화, 테스트, 패키징 및 설치를 위한 크로스 플랫폼 프리 오픈 소스 소프트웨어입니다.CMake는 빌드 시스템 자체가 아니라 다른 시스템의 빌드 파일을 생성합니다.여러 라이브러리에 의존하는 디렉터리 계층 및 응용 프로그램을 지원합니다.Make, Qt Creator, Ninja, Android Studio, Apple의 Xcode 및 Microsoft Visual Studio와 같은 네이티브 빌드 환경과 함께 사용됩니다.종속성이 최소화되어 자체 빌드 시스템에 C++ 컴파일러만 필요합니다.
CMake는 허용 BSD-3-Clause [4]라이선스에 따라 오픈소스 소프트웨어로 배포됩니다.
역사
CMake 개발은 Insight Segmentation and Registration [5]Toolkit을 위한 교차 플랫폼 빌드 환경의 필요성에 따라 1999년에 시작되었습니다.이 프로젝트는 가시적 인간 프로젝트의 일환으로 미국 국립 의학 도서관으로부터 자금을 지원받고 있다.Ken Martin과 다른 개발자가 VTK(Visualization Toolkit)를 지원하기 위해 만든 PC메이커에서 부분적으로 영감을 받았습니다.Kitware에서 Bill Hoffman은 PCmaker의 컴포넌트와 자신의 아이디어를 혼합하여 Unix 구성 스크립트의 기능을 모방하려고 노력했습니다.CMake는 2000년에 처음 구현되어 2001년에 더욱 개발되었습니다.
VXL 프로젝트,[clarification needed] Brad [clarification needed]King이 추가한 케이블[6] 기능, [clarification needed]DART 지원을 위한 GE Corporate R&D 등 개발자 자신의 시스템에 CMake를 통합함으로써 지속적인 개발과 개선이 이루어졌습니다.VTK가 빌드 환경과 ParaView를 지원하기 위해 CMake로 전환했을 때 추가 기능이 생성되었습니다.
버전 3.0은 2014년 [7]6월에 출시되었습니다.그것은 "모던 CMake"[8]의 시작이라고 묘사되어 왔다.전문가들은 이제 대상과 [9]재산에 유리한 변수는 피하라고 조언한다.명령어add_compile_options,include_directories,link_directories,link_libraries이제 CMake 2의 핵심이었던 명령어가 타겟 고유의 명령어로 대체되어야 합니다.
특징들
주요 기능은 소스 트리 외부에 컴파일러 출력(오브젝트 파일 등)을 배치하는 기능입니다.이를 통해 동일한 소스 트리에서 여러 빌드를 생성하고 교차 컴파일을 수행할 수 있습니다.컴파일러 출력을 소스 트리 외부에 배치하면 트리가 빌드 파일과 분리되므로 빌드 디렉토리를 삭제해도 소스 파일이 삭제되지 않습니다.그러나 사용자는 원본 소스 코드 폴더를 제거할 수 없습니다.
유연한 프로젝트 구조
CMake는 시스템 전체 및 사용자 지정 실행 파일, 파일 및 라이브러리를 검색할 수 있습니다.이러한 위치는 캐시에 저장되며, 캐시는 대상 빌드 파일을 생성하기 전에 커스터마이즈할 수 있습니다.캐시는 CMake와 함께 제공되는 그래픽 에디터로 편집할 수 있습니다.
복잡한 디렉토리 계층 구조 및 여러 라이브러리에 의존하는 애플리케이션은 CMake에서 잘 지원됩니다.예를 들어 CMake는 여러 개의 툴킷이 있는 프로젝트 또는 각각 여러 개의 디렉토리가 있는 라이브러리를 수용할 수 있습니다.또한 CMake는 최종 애플리케이션에 대해 컴파일할 코드를 생성하기 전에 실행 파일을 생성해야 하는 프로젝트와 함께 작업할 수 있습니다.오픈 소스로 확장 가능한 설계를 통해 CMake를 특정 프로젝트에 [10]맞게 조정할 수 있습니다.
IDE 구성 지원
CMake는 Microsoft Visual Studio, Xcode 및 Eclipse CDT와 같은 일반적인 IDE용 프로젝트 파일을 생성할 수 있습니다.또한 Windows에서 MSBuild 또는 NMake용 빌드 스크립트, Linux, macOS, Cygwin과 같은 Unix 유사 플랫폼에서는 Unix Make, Windows 및 Unix 유사 플랫폼에서는 Ninja를 생성할 수 있습니다.
컴파일러 기능 검출
CMake는 대상 프로그램 또는 라이브러리를 [11]컴파일하기 위해 컴파일러가 지원해야 하는 기능을 지정할 수 있습니다.
컴파일러
CMake는 Apple Clang, Clang, GNU GCC, MSVC, Oracle Developer Studio, Intel C++ [12]컴파일러 등 광범위한 컴파일러 목록을 지원합니다.
빌드 프로세스
CMake를 사용한 프로그램 또는 라이브러리의 구축은 2단계 프로세스입니다.먼저 CMake 언어로 작성된 구성 파일(CMakeLists.txt)에서 표준 빌드 파일을 생성(생성)합니다.다음으로 플랫폼의 네이티브 빌드 툴(네이티브 툴 체인)을 사용하여 실제 프로그램을 [10][13]구축합니다.
빌드 파일은 사용된 생성기(예: Unix Makefiles for make)에 따라 구성됩니다.상급 사용자는 특정 컴파일러 및 OS 요구를 지원하기 위해 추가 makefile 생성기를 작성 및 통합할 수도 있습니다.생성된 파일은 일반적으로 (를 사용하여)cmake(소스 빌드를 벗어난) 폴더(예:build/.
각 빌드 프로젝트에는 각각 독자적인 것이 포함되어 있습니다.CMakeCache.txt파일 및CMakeFiles모든 프로젝트(하위) 디렉토리에 있는 디렉토리add_subdirectory(...)명령을 사용하여 반복 실행 시 재생을 방지하거나 재생 속도를 높일 수 있습니다.
빌드 파일(빌드 규칙)의 동작은 타깃 속성(버전 3.1 이후) 또는CMAKE_...-변수 변경.CMake 자체의 설정이나 초기 [9][14]디폴트 설정에도 변수가 사용되기 때문에 타겟만의 설정에서는 후자는 권장되지 않습니다.Makefile(또는 대체) 규칙이 생성되면 실제 바이너리 파일 또는 기타 생성에 사용할 수 있습니다.
빌드 타깃 유형
CMake Lists에 따라 달라집니다.txt 구성에는 실행 파일, 라이브러리(예:libxyz,xyz.dll오브젝트 파일 라이브러리 또는 의사 파일(에일리어스 포함)을 지정합니다.CMake는 실행 가능한 바이너리/라이브러리로 링크할 수 있는 오브젝트 파일을 생성하여 동적(런타임) 링크를 피하고 대신 정적(컴파일 타임) 링크를 사용할 수 있습니다.이것에 의해, 다양한 [15]최적화를 유연하게 설정할 수 있습니다.
빌드 종속성은 자동으로 결정될 수 있습니다.
미리 컴파일된 헤더
버전 3.[16]6 이후 CMake를 사용하여 미리 컴파일된 헤더를 생성할 수 있습니다.
언어
CMake Lists(CMake 리스트)txt
CMake에는 비교적 간단한 인터프리터 형식의 명령어 스크립트 언어가 있습니다.변수, 문자열 조작 방식, 배열, 함수/매크로 선언 및 모듈 포함(가져오기)을 지원합니다.CMake Language 명령어(또는 지시어)는 다음과 같이 읽습니다.cmake라는 이름의 파일에서CMakeLists.txt이 파일은 CMake가 프로젝트의 빌드 사양(Make 파일 등)에 배치할 소스 파일 및 빌드 파라미터를 지정합니다.또한..cmake- 수식 파일에는 CMake에서 [17]사용하는 스크립트를 포함할 수 있습니다.
프로젝트 빌드 파일을 생성하려면cmake를 포함하는 디렉토리를 지정합니다.CMakeLists.txt이 파일에는 다음 형식의 명령어가1개 이상 포함되어 있습니다.COMMAND(argument ...).
명령어 구문
명령어 인수는 공백으로 구분되며 인수 그룹을 구분하는 키워드를 포함할 수 있습니다.명령어는 키워드를 사용할 수 있습니다.예를 들어 명령어로SET_SOURCE_FILE_PROPERTIES(source_file ... COMPILE_FLAGS compiler_option ...)키워드는COMPILE_FLAGS. 소스 파일 목록과 다른 [18]옵션 사이의 구분자 역할을 합니다.
CMake가 타겟과 그 의존관계를 지정하기 위해 제공하는 명령어의 예이며 CMake Lists의 시작점으로 기능합니다.txt:[19][20][21]
add_executable(...)- 소스(선택한 언어에 따라 다름)가 포함된 실행 가능한 이진 타깃을 구축한다고 선언합니다.add_library(...)- 라이브러리의 경우에도 마찬가지입니다.target_link_libraries(...): 의존관계 등을 추가합니다.
JSON 문자열
CMake는 (버전 3.19 [22]이후) JSON 데이터 문자열에서 변수에 값을 추출하는 기능을 지원합니다.
내부
실행 가능한 프로그램 CMake, CPack 및 CTest는 C++ 프로그래밍 언어로 작성됩니다.
CMake 기능의 대부분은 CMake [23]언어로 작성된 모듈에 구현되어 있습니다.
릴리스 3.0 이후 CMake 매뉴얼에서는 reStructured를 사용하고 있습니다.텍스트 마크업HTML 페이지 및 man 페이지는 Sphinx 문서 생성기에 의해 생성됩니다.
모듈 및 도구
CMake는 많은 제품과 함께 출하됩니다..cmake모듈 및 도구입니다.이것에 의해, 의존 관계(내장 및 외부 양쪽 모두)의 검출등의 작업이 용이하게 됩니다.FindXYZ모듈, 툴 체인 환경 및 실행 파일 테스트, 패키지 출시(CPack모듈 및cpack명령어) 및 외부 프로젝트에 대한 의존관계 관리(ExternalProject모듈):[24][25]
- ctest : CMakeLists에서 지정된 타깃테스트명령어에 사용합니다.txt
- ccmake 및 cmake-gui: 네이티브 빌드 시스템용 설정 변수를 조정 및 업데이트합니다.
- cpack : 소프트웨어 패키지화 지원
CPack
CPack은 소프트웨어 배포용 패키징 시스템입니다.CMake와 긴밀하게 통합되어 있지만 CMake 없이도 작동할 수 있습니다.[26][27]
다음을 생성하는 데 사용할 수 있습니다.
도입
CMake는 상업용, 오픈 소스 및 학술용 소프트웨어 프로젝트에서 널리 채택되어 왔습니다.주목할 만한 사용자로는 Netflix, Inria, MySQL, Boost(C++ 라이브러리), KeePassXC, KDE/KDE Plasma 5, KiCAD, FreeCAD, Webkit,[28] Blender 3D, Biicode, ReactOS, Apache QPID,[29] ATLAS 실험, Second [30]Life 등이 있습니다.
예
안녕 세계
다음 소스 코드 파일은 CMake를 사용하여 C++로 작성된 간단한 hello 월드 프로그램을 구축하는 방법을 보여줍니다.
// hello.cpp #실패하다 <iostream> 인트 주된() { 표준::외치다 << > 안녕, 세상아!\n"; } # CMake 리스트txt cmake_syslog_required(버전 3.5) 프로젝트.(안녕 세계 CXX) 추가 가능(안녕 hello.cpp) Linux 시스템에서 CMake를 실행하기 위한 셸 명령어(위의 2개의 파일이 포함된 디렉토리에 입력):
cmake - B build . # 빌드 디렉토리를 설정합니다.cmake - build build # 빌드 디렉토리에 프로그램을 빌드합니다./build/hello # 프로그램을 실행합니다(출력 "Hello, world!").
「 」를 참조해 주세요.
레퍼런스
- ^ "CMake 3.23.3 available for download".
- ^ "The CMake Open Source Project on OpenHub". OpenHub. Retrieved 9 April 2016.
- ^ "CMake".
- ^ "Licenses · master · CMake / CMake". GitLab. Retrieved 13 November 2020.
- ^ "FLOSS Weekly 111: CMake". podcast. TWiT Network. Retrieved 27 February 2011.
- ^ "The CABLE". Archived from the original on 19 June 2013. Retrieved 10 November 2010.
- ^ Maynard, Robert (10 June 2014). "[CMake] [ANNOUNCE] CMake 3.0.0 Released".
- ^ "Effective Modern CMake". Gist.
- ^ a b Binna, Manuel (22 July 2018). "Effective Modern CMake".
- ^ a b Neundorf, Alexander (21 June 2006). "Why the KDE project switched to CMake—and how". LWN.net.
- ^ "CMake compiler feature detect". www.scivision.dev. 15 November 2020. Retrieved 22 January 2022.
- ^ "Supported Compilers". CMake Documentation. Retrieved 22 January 2022.
- ^ "cmake-toolchains(7) — CMake 3.19.0-rc2 Documentation". cmake.org. Retrieved 29 October 2020.
- ^ Pfeifer, Daniel (19 May 2017). Effective Cmake (PDF). CPPNow.
- ^ "cmake-buildsystem(7) — CMake 3.19.0-rc3 Documentation". cmake.org. Retrieved 14 November 2020.
- ^ "target_precompile_headers — CMake 3.21.20210925-gb818e3c Documentation". cmake.org. Retrieved 25 September 2021.
- ^ "cmake-language(7) — CMake 3.19.0-rc2 Documentation". cmake.org. Retrieved 29 October 2020.
- ^ Cedilnik, Andrej (30 October 2003). "Cross-Platform Software Development Using CMake Software". Linux Journal. Retrieved 29 January 2021.
- ^ "add_executable — CMake 3.19.0-rc1 Documentation". cmake.org. Retrieved 25 October 2020.
- ^ "add_library — CMake 3.19.0-rc1 Documentation". cmake.org. Retrieved 25 October 2020.
- ^ "target_link_directories — CMake 3.20.2 Documentation". cmake.org. Retrieved 10 May 2021.
- ^ "CMake 3.19 Release Notes — CMake 3.19.7 Documentation". cmake.org. Retrieved 15 March 2021.
- ^ "cmake-language(7) — CMake 3.19.0-rc1 Documentation". cmake.org. Retrieved 25 October 2020.
- ^ "cmake-modules(7) — CMake 3.14.7 Documentation". cmake.org. Retrieved 24 October 2020.
- ^ "ExternalProject — CMake 3.14.7 Documentation". cmake.org. Retrieved 24 October 2020.
- ^ "Packaging With CPack". CMake Community Wiki.
- ^ – Linux 일반 명령어 매뉴얼.
- ^ "Building Blender - Blender Developer Wiki". wiki.blender.org. Retrieved 1 July 2021.
- ^ Elmsheuser, J; Krasznahorkay, A; Obreshkov, E; Undrus, A (2017). "Large Scale Software Building with CMake in ATLAS" (PDF). CERN. Archived (PDF) from the original on 28 July 2018.
- ^ "CMake Success". cmake.org. Kitware. 2011. Retrieved 12 March 2022.
외부 링크
- 공식 웹사이트

- GitHub에서의 CMake
- C++Now 2017 : Daniel Pfeifer "유효한 CMake" (유튜브)
