수색…


비고

CMake는 주로 C ++ 용 코드 빌드를 정의하고 관리하는 도구입니다.

CMake는 크로스 플랫폼 도구입니다. 아이디어는 프로젝트가 빌드되는 방식에 대한 단일 정의를 갖는 것입니다. 이는 지원되는 모든 플랫폼에 대한 특정 빌드 정의로 변환됩니다.

이것은 다른 플랫폼 별 빌드 시스템과 페어링하여이를 수행합니다. CMake는 다른 특정 플랫폼에 대한 빌드 입력을 생성하는 중간 단계입니다. Linux에서 CMake는 Makefile을 생성합니다. Windows에서는 Visual Studio 프로젝트를 생성 할 수 있습니다.

빌드 동작은 소스 코드의 모든 디렉토리에있는 CMakeLists.txt 파일에 정의되어 있습니다. 각 디렉토리의 CMakeLists 파일은 빌드 시스템이 특정 디렉토리에서해야하는 것을 정의합니다. 또한 CMake가 처리해야하는 하위 디렉토리를 정의합니다.

일반적인 조치는 다음과 같습니다.

  • 이 디렉토리의 일부 소스 파일에서 라이브러리 또는 실행 파일을 빌드하십시오.
  • 빌드 중에 포함 경로에 파일 경로를 추가하십시오.
  • 빌드 시스템이이 디렉토리와 서브 디렉토리에서 사용할 변수를 정의하십시오.
  • 특정 빌드 구성에 따라 파일을 생성하십시오.
  • 소스 트리 어딘가에있는 라이브러리를 찾으십시오.

최종 CMakeLists 파일은 CMakeLists 파일의 범위가 너무 제한되어 있기 때문에 매우 명확하고 직관적 일 수 있습니다. 각각은 현재 디렉토리에있는만큼 많은 빌드를 처리합니다.

CMake에 대한 공식 자료는 CMake의 문서튜토리얼을 참조하십시오.

버전

번역 출시일
3.9 2017-07-18
3.8 2017-04-10
3.7 2016-11-11
3.6 2016-07-07
3.5 2016-03-08
3.4 2015-11-12
3.3 2015-07-23
3.2 2015-03-10
3.1 2014-12-17
3.0 2014-06-10
2.8.12.1 2013-11-08
2.8.12 2013-10-11
2.8.11 2013-05-16
2.8.10.2 2012-11-27
2.8.10.1 2012-11-07
2.8.10 2012-10-31
2.8.9 2012-08-09
2.8.8 2012-04-18
2.8.7 2011-12-30
2.8.6 2011-12-30
2.8.5 2011 년 7 월 8 일
2.8.4 2011-02-16
2.8.3 2010-11-03
2.8.2 2010-06-28
2.8.1 2010-03-17
2.8 2009-11-13
2.6 2008-05-05

CMake 설치

CMake 다운로드 페이지로 가서 Windows, Linux 또는 Mac OS X와 ​​같은 운영 체제 용 바이너리를 얻으십시오. Windows에서는 설치할 바이너리를 두 번 클릭하십시오. Linux에서는 터미널에서 바이너리를 실행합니다.

Linux에서는 배포판의 패키지 관리자에서 패키지를 설치할 수도 있습니다. Ubuntu 16.04에서는 다음 명령을 사용하여 명령 줄 및 그래픽 응용 프로그램을 설치할 수 있습니다.

sudo apt-get install cmake
sudo apt-get install cmake-gui

FreeBSD에서는 명령 행과 Qt 기반의 그래픽 애플리케이션을 다음과 같이 설치할 수 있습니다 :

pkg install cmake
pkg install cmake-gui

Mac OSX에서 소프트웨어를 설치할 때 사용할 수있는 패키지 관리자 중 하나를 사용하면 가장 유명한 MacPorts ( MacPorts )와 Homebrew ( Homebrew ) 중 하나를 통해 CMake를 설치할 수 있습니다. 예를 들어 MacPorts의 경우 다음을 입력하십시오.

sudo port install cmake  

CMake를 설치하고 Homebrew 패키지 관리자를 사용할 경우에는

brew install cmake

CMake를 설치 한 후에는 다음을 수행하여 쉽게 확인할 수 있습니다.

cmake --version

다음과 비슷한 것을보아야합니다.

cmake version 3.5.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

빌드 유형 간 전환 (예 : 디버그 및 릴리스)

CMake는 일반적으로 기본 컴파일러 및 링커 매개 변수 (예 : 생성되는 디버깅 정보) 또는 대체 코드 경로에 영향을주는 여러 가지 빌드 유형을 알고 있습니다.

기본적으로 CMake는 다음 빌드 유형을 처리 할 수 ​​있습니다.

  • 디버그 : 일반적으로 디버깅 정보, 최적화 등을 포함하는 고전적인 디버그 빌드
  • 릴리스 : 디버깅 정보 및 전체 최적화없이 일반적인 릴리스 빌드.
  • RelWithDebInfo : : 릴리스 와 같지만 디버깅 정보가 있습니다.
  • MinSizeRel : 크기에 최적화 된 특별 릴리스 빌드.

구성을 처리하는 방법은 사용중인 발전기에 따라 다릅니다.

Visual Studio와 같은 일부 생성자는 여러 구성을 지원합니다. CMake는 모든 구성을 한 번에 생성 할 것이고 IDE에서 선택하거나 --config CONFIG ( cmake --build )를 사용하여 빌드하려는 구성을 선택할 수 있습니다. 이러한 생성기의 경우 CMake는 서로 다른 구성의 파일이 서로 밟지 않도록 빌드 디렉토리 구조를 생성하는 데 최선의 노력을 다할 것입니다.

Unix Makefile과 같은 단일 구성만을 지원하는 생성기는 다르게 작동합니다. 여기서 현재 활성화 된 구성은 CMake 변수 CMAKE_BUILD_TYPE 의 값에 의해 결정됩니다.

예를 들어 다른 빌드 유형을 선택하려면 다음 명령 줄 명령을 실행할 수 있습니다.

cmake -DCMAKE_BUILD_TYPE=Debug path/to/source
cmake -DCMAKE_BUILD_TYPE=Release path/to/source

CMake 스크립트는 CMAKE_BUILD_TYPE 자체를 설정하지 CMAKE_BUILD_TYPE 합니다. 일반적으로 사용자의 책임으로 간주됩니다.

단일 구성 발전기의 경우 구성을 전환하려면 CMake를 다시 실행해야합니다. 후속 빌드는 이전 구성에 의해 생성 된 개체 파일을 덮어 쓰게됩니다.

간단한 "Hello World"프로젝트

main() 함수를 정의하는 C ++ 소스 파일 main.cpp 주어지면, 다음과 같은 내용의 CMakeLists.txt 파일이 CMake 에게 현재 시스템과 기본 C ++ 컴파일러에 적합한 빌드 명령어를 생성하도록 지시합니다.

main.cpp ( C ++ Hello World 예제 )

#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.4)

project(hello_world)

add_executable(app main.cpp)

Coliru에 살고있어.

  1. cmake_minimum_required(VERSION 2.4) 는 현재 스크립트를 평가하는 데 필요한 최소 CMake 버전을 설정합니다.

  2. project(hello_world) 는 새로운 CMake 프로젝트를 시작합니다. 이것은 많은 내부 CMake 로직, 특히 기본 C 및 C ++ 컴파일러의 탐지를 트리거합니다.

  3. add_executable(app main.cpp) 을 사용하면 현재 소스 파일 main.cpp 에서 실행 가능한 app 을 컴파일하기 위해 현재 설정에 대한 기본 플래그가있는 구성된 컴파일러를 호출하는 빌드 대상 app 이 작성됩니다.

명령 행 (In-Source-Build, 권장하지 않음)

> cmake .
...
> cmake --build .

cmake . 컴파일러 탐지, 주어진 CMakeLists.txt 를 평가 않습니다 . 현재 작업 디렉토리에 빌드 환경을 생성합니다.

cmake --build . - cmake --build . 명령은 필요한 build / make 호출에 대한 추상화입니다.

명령 줄 (Out-of-Source, 권장)

빌드 아티팩트에서 소스 코드를 깨끗하게 유지하려면 "소스 외부"빌드를 수행해야합니다.

> mkdir build
> cd build
> cmake ..
> cmake --build .

또는 CMake는 위 예제의 플랫폼 쉘의 기본 명령을 추상화 할 수 있습니다.

> cmake -E make_directory build
> cmake -E chdir build cmake .. 
> cmake --build build 

여러 소스 파일이있는 "Hello World"

먼저 헤더 파일의 디렉토리를 include_directories() 로 지정하면 add_executable() 을 사용하여 대상 실행 파일의 해당 소스 파일을 지정하고 소스 파일에 정확하게 하나의 main() 함수가 있는지 확인해야합니다.

다음은 간단한 예입니다. 모든 파일은 PROJECT_SOURCE_DIR 디렉토리에 있다고 가정합니다.

main.cpp

#include "foo.h"

int main()
{
    foo();
    return 0;
}

foo.h

void foo();

foo.cpp

#include <iostream>
#include "foo.h"

void foo()
{
    std::cout << "Hello World!\n";
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.4)

project(hello_world)

include_directories(${PROJECT_SOURCE_DIR})
add_executable(app main.cpp foo.cpp)  # be sure there's exactly one main() function in the source files

우리는 위의 예제 에서와 동일한 절차를 수행하여 프로젝트를 빌드 할 수 있습니다. 그런 다음 app 실행이 인쇄됩니다.

>./app
Hello World!

"Hello World"를 도서관으로

이 예제는 "Hello World"프로그램을 라이브러리로 전개하는 방법과 다른 프로그램과 링크시키는 방법을 보여줍니다.

http://www.riptutorial.com/cmake/example/22391/-hello-world--with-multiple-source-files 예제와 동일한 소스 / 헤더 파일 세트가 있다고 가정 해보십시오. 여러 소스 파일을 빌드하는 대신 add_library() 를 사용하여 foo.cpp 를 라이브러리로 배포 한 다음 target_link_libraries() 사용하여 기본 프로그램과 링크하여 foo.cpp 를 먼저 배포 할 수 있습니다.

CMakeLists.txt 를 다음과 같이 수정합니다.

cmake_minimum_required(VERSION 2.4)

project(hello_world)

include_directories(${PROJECT_SOURCE_DIR})
add_library(applib foo.cpp)
add_executable(app main.cpp)
target_link_libraries(app applib)

동일한 단계를 거치면 동일한 결과가 나타납니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow