를 배우려고 할 때에 많은 파일이 자동으로 만들어 나는 찾을 수 없습니다 어떤 좋은 소개합니다. CMake 문서는 매우 포괄적이지만 초보자에게는 적합하지 않습니다. CMake Wiki 에 링크 된 몇 가지 유용한 자습서가 있지만 대부분은 매우 구체적인 문제 만 다루거나 너무 기본적입니다. 그래서 나는이 짧은 CMake 소개를 문서를 통해 작업하고 stackoverflow 질문을 한 후에 발견 한 것의 증류 버전으로 썼습니다.
진행중인 작업이며 지속적으로 개선하려고 노력할 것입니다.
에 많은 파일이 자동으로 만들어 메타를 구축할 수 있는 도구를 생성하는 기본 구축에 대한 스크립트를 다양한 플랫폼:
- 유닉스 파일
- Xcode
- Visual Studio
- CodeBlocks
- Eclipse
- 다…
전체 목록 보기에 많은 파일이 자동으로 만들어 생성기입니다.
우리는 하나의 간단한 응용 프로그램을 가지고 있다고 가정 할 수 있습니다.c 파일.
우리 프로젝트의 루트에CMakeLists.txt
파일을 작성하여.
cmake_minimum_required(VERSION 2.8)project(app_project)add_executable(myapp main.c)install(TARGETS myapp DESTINATION bin)
그게 우리가 필요한 수축으로 우리의 응용 프로그램을 사용 가능한 모든 발전기.
add_executable
는 링크 된 모든 소스 파일로 바이너리를 정의합니다.
install
는 cmake 에게 설치 디렉토리의bin
디렉토리에 바이너리를 설치하도록 지시합니다.
Building
CMake 는 out-of-source 빌드를 지원하므로 컴파일 된 모든 코드는 소스와 별도의 디렉토리로 이동합니다.
를 시작하고 구축을 우리는 새 폴더를 만듭니다.
mkdir _build
cd _build
호출에 많은 파일이 자동으로 만들어진 프로젝트의 경로를’s root(이 경우 부모 폴더가):
cmake ..
이를 생성하는 스크립트를 구축 기본값으로 사용하기 리눅스에서/OSX 이해야 Make.
기본적으로 cmake 는 빌드를 시스템 디렉토리에 설치합니다.
을 정의 사용자 정의 설치 디렉토리는 우리가 단순히 전달하기에 많은 파일이 자동으로 만들어:
cmake .. -DCMAKE_INSTALL_PREFIX=../_install
를 실행하는 스크립트를 구축할 수 있는 단순히 사용하 Makefile:
make
make install
실행할 수 있습니다 우리의 바이너리에서 설치 디렉토리:
../_install/bin/myapp
만약 우리가 사용하고 싶다고 다른 발전기 우리는 그것을 전달하기에 많은 파일이 자동으로 만들어 사용하는-G
매개변수:
cmake .. -GXcode
이 출력할 것입니다 쉽게 구성되어 Xcode 프로젝트를 구축합니다.
를 사용하여 많은 파일이 자동으로 만들어 라이브러리와
라이브러리를 빌드하기 위해서는 우리가 사용하는 비슷한 스크립트:
cmake_minimum_required(VERSION 2.8)project(libtest_project)add_library(test STATIC test.c)install(TARGETS test DESTINATION lib)
install(FILES test.h DESTINATION include)
에 많은 파일이 자동으로 만들어를 구축 라이브러리로libtest.a
설치로 lib 폴더의 설치 디렉토리에 있습니다.
우리는 또한 설치 단계에 공개 헤더 파일을 포함하고 cmake 에게include
에 넣으라고 지시합니다.
대신에 정적 라이브러리는 우리를 구축할 수 있는 공유 lib 뿐만 아니라.
add_library(test SHARED test.c)
링크 라이브러리는 실행 파일로 많은 파일이 자동으로 만들어
을 확대할 수 있습니다 우리의 실행 위에서 연결하여 우리의 libray 에libtest.a
.
라이브러리의 디렉토리를 myapp 프로젝트에 하위 디렉토리로 추가하는 것으로 시작하겠습니다.
이제 CMakeLists 에 정의 된 라이브러리를 사용할 수 있습니다.myapp 의 CMakeLists 에서 libtest_project 의 txt.txt:
cmake_minimum_required(VERSION 2.8)project(myapp)add_subdirectory(libtest_project)add_executable(myapp main.c)target_link_libraries(myapp test)install(TARGETS myapp DESTINATION bin)
add_subdirectory
test
에서 정의 libtestproject 사용할 수 있다.
에서target_link_libraries
우리는 CMake 에게 그것을 우리의 실행 파일에 연결하라고 말한다. CMake 는 myapp 에 연결하기 전에 먼저 빌드 테스트를 수행해야합니다.
포함하여 외부 라이브러리를 사용하여 다른 시스템을 구축
는 동안에 많은 파일이 자동으로 만들 즐기는 증가하는 관심있는 여전히 많은 라이브러리를 사용하는 시스템을 구축과 같은 유닉스 파일. 빌드 스크립트를 다시 작성할 필요없이 CMake 프로젝트에서 사용할 수 있습니다.
우리가 필요한 것은 많은 파일이 자동으로 만들의 지원을 외부 프로젝트와 수입된 라이브러리:
ExternalProject_Add(project_luajit
URL http://luajit.org/download/LuaJIT-2.0.1.tar.gz
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/luajit-2.0.1
CONFIGURE_COMMAND ""
BUILD_COMMAND make
INSTALL_COMMAND make install
PREFIX=${CMAKE_CURRENT_BINARY_DIR}/luajit-2.0.1
)ExternalProject_Get_Property(project_luajit install_dir)add_library(luajit STATIC IMPORTED)set_property(TARGET luajit PROPERTY IMPORTED_LOCATION ${install_dir}/lib/libluajit-5.1.a)add_dependencies(luajit project_luajit)add_executable(myapp main.c)include_directories(${install_dir}/include/luajit-2.0)target_link_libraries(myapp luajit)
ExternalProject_Add
BUILD_COMMAND
INSTALL_COMMAND
CMakeLists.txt
에 외부 프로젝트 실행합니다.
우리의 경우 Makefile 을 사용하여 구축 된 luajit 라이브러리를 사용하려고합니다.
add_library
IMPORTED_LOCATION
을 제공합니다.
호출ExternalProject_Add
add_dependencies
를 호출하여 가져온 라이브러리를 외부 프로젝트에 종속시킵니다.
마지막으로 가져온 라이브러리를target_link_libraries
가있는”일반”라이브러리처럼 연결할 수 있습니다.나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.