cmake 튜토리얼
cmake 시작하기
수색…
비고
CMake는 주로 C ++ 용 코드 빌드를 정의하고 관리하는 도구입니다.
CMake는 크로스 플랫폼 도구입니다. 아이디어는 프로젝트가 빌드되는 방식에 대한 단일 정의를 갖는 것입니다. 이는 지원되는 모든 플랫폼에 대한 특정 빌드 정의로 변환됩니다.
이것은 다른 플랫폼 별 빌드 시스템과 페어링하여이를 수행합니다. CMake는 다른 특정 플랫폼에 대한 빌드 입력을 생성하는 중간 단계입니다. Linux에서 CMake는 Makefile을 생성합니다. Windows에서는 Visual Studio 프로젝트를 생성 할 수 있습니다.
빌드 동작은 소스 코드의 모든 디렉토리에있는 CMakeLists.txt
파일에 정의되어 있습니다. 각 디렉토리의 CMakeLists
파일은 빌드 시스템이 특정 디렉토리에서해야하는 것을 정의합니다. 또한 CMake가 처리해야하는 하위 디렉토리를 정의합니다.
일반적인 조치는 다음과 같습니다.
- 이 디렉토리의 일부 소스 파일에서 라이브러리 또는 실행 파일을 빌드하십시오.
- 빌드 중에 포함 경로에 파일 경로를 추가하십시오.
- 빌드 시스템이이 디렉토리와 서브 디렉토리에서 사용할 변수를 정의하십시오.
- 특정 빌드 구성에 따라 파일을 생성하십시오.
- 소스 트리 어딘가에있는 라이브러리를 찾으십시오.
최종 CMakeLists
파일은 CMakeLists
파일의 범위가 너무 제한되어 있기 때문에 매우 명확하고 직관적 일 수 있습니다. 각각은 현재 디렉토리에있는만큼 많은 빌드를 처리합니다.
버전
번역 | 출시일 |
---|---|
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)
cmake_minimum_required(VERSION 2.4)
는 현재 스크립트를 평가하는 데 필요한 최소 CMake 버전을 설정합니다.project(hello_world)
는 새로운 CMake 프로젝트를 시작합니다. 이것은 많은 내부 CMake 로직, 특히 기본 C 및 C ++ 컴파일러의 탐지를 트리거합니다.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)
동일한 단계를 거치면 동일한 결과가 나타납니다.