CMake a Példa

Mirko Kiefer
Feb 22, 2017 · 4 min olvassa el a

Mikor akar tanulni, CMake nem találtam semmilyen jó bevezetés. A CMake dokumentáció meglehetősen átfogó, de nem alkalmas kezdőknek. Van néhány hasznos útmutatók kapcsolódik a CMake Wiki, de a legtöbbjük csak kiterjed nagyon konkrét problémák, vagy túl alapvető. Ezért írtam ezt a rövid CMake bevezetést desztillált változatként annak, amit a dokumentumokon végzett munka után megtudtam, majd követtem a stackoverflow kérdéseket.

Ez egy folyamatban lévő munka, és megpróbálom folyamatosan javítani.

a CMake egy meta build eszköz, amely lehetővé teszi natív build szkriptek létrehozását számos platformon:

  • Unix Makefiles
  • Xcode
  • Visual Studio
  • CodeBlocks
  • Eclipse
  • és még több…

lásd a CMake generátorok teljes listáját.

tegyük fel, hogy van egy egyszerű alkalmazás egyetlen .c fájl.

létrehozunk egy CMakeLists.txt fájlt a projekt gyökerében.

cmake_minimum_required(VERSION 2.8)project(app_project)add_executable(myapp main.c)install(TARGETS myapp DESTINATION bin)

Ez minden, amire szükségünk van ahhoz, hogy alkalmazásunkat a rendelkezésre álló generátorok bármelyikével felépíthessük.

add_executable meghatározza bináris fájljainkat az összes kapcsolt forrásfájllal.

install mondja cmake telepíteni a bináris a bin könyvtár az install könyvtár.

Building

a CMake támogatja az Out-of-source buildeket-így minden lefordított kódunk a forrásoktól különálló könyvtárba kerül.

kezdeni építeni hozzon létre egy új mappát:

mkdir _build
cd _build

, Majd a hívás cmake az utat, hogy a projekt root (ebben az esetben a szülő mappa):

cmake ..

Ez a generál épít parancsfájlok használata az alapértelmezett generátor — Linux/OSX ez makefile-ok.

alapértelmezés szerint a cmake telepíti az építésünket a rendszerkönyvtárakba.
egy egyéni telepítési könyvtár meghatározásához egyszerűen átadjuk a cmake-nek:

cmake .. -DCMAKE_INSTALL_PREFIX=../_install

a build szkript futtatásához egyszerűen használhatja a Makefile-t:

make
make install

most már futtathatjuk bináris fájlunkat a telepítési könyvtárból:

../_install/bin/myapp

ha más generátort akarunk használni, akkor a -G paraméter:

cmake .. -GXcode

Ez egy könnyen konfigurált Xcode projektet eredményez az alkalmazásunk felépítéséhez.

A CMake a könyvtárakkal

egy könyvtár építéséhez hasonló szkriptet használunk:

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)

CMake a könyvtárat libtest.a – ként építi be, majd a telepítő könyvtár lib mappájába telepíti.
mi is tartalmazza a nyilvános fejléc fájlt a telepítési lépés, és mondja cmake, hogy tegye be include.

statikus könyvtár helyett egy megosztott lib-t is építhetünk:

add_library(test SHARED test.c)

A könyvtárak CMake

futtatható fájlokkal való összekapcsolása felülről kiterjeszthetjük a futtatható fájlunkat a könyvtár libtest.a.

Kezdjük azzal, hogy a könyvtár könyvtárát alkönyvtárként adjuk hozzá myapp projektünkhöz.

most, tudjuk használni a könyvtár meghatározott CMakeLists.TXT a libtest_project a myapp CMakeLists.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 teszi a könyvtár test meghatározott libtestproject elérhető az építmény.
In target_link_libraries megmondjuk a CMake-nek, hogy kapcsolja össze a futtatható fájlunkkal. CMake győződjön meg róla, hogy először építeni teszt összekapcsolása előtt a myapp.

beleértve a külső könyvtárakat más build rendszerek használatával

míg a CMake növekvő érdeklődést élvez, még mindig rengeteg könyvtár van natív build rendszerekkel, mint például a Unix Makefiles. Használhatja őket a CMake projektben anélkül, hogy újra kellene írnia a build szkripteket.

csak a CMake támogatására van szükségünk külső projektekhez és importált könyvtárakhoz:

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 lehetővé teszi számunkra, hogy egy külső projektet célul adjunk a projektünkhöz. Ha nem ad meg olyan parancsokat, mint a BUILD_COMMAND vagy INSTALL_COMMAND, a CMake egy CMakeLists.txt parancsot fog keresni a külső projektben, majd végrehajtja azt.
esetünkben a luajit könyvtárat szeretnénk használni, amely Makefile segítségével épül fel.

add_library támogatja a már épített könyvtárak importálását is – csak be kell állítanunk a IMPORTED_LOCATION tulajdonságát.
CallingExternalProject_Add csak a külső projektet határozza meg célként, de nem építi meg automatikusan. Csak akkor épül fel, ha függőséget adunk hozzá. Ezért a add_dependencies – t hívjuk, hogy az importált könyvtárunk a külső projekttől függjön.

végül összekapcsolhatjuk importált könyvtárunkat, mint egy “normál”könyvtárat target_link_libraries.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük