CMake Příkladem

Mirko Kiefer
Feb 22, 2017 · 4 min číst

Když se snaží naučit CMake jsem nemohl najít nějaký dobrý úvod. Dokumentace CMake je poměrně komplexní, ale není vhodná pro začátečníky. Na CMake Wiki jsou propojeny některé užitečné návody, ale většina z nich pokrývá pouze velmi specifické problémy nebo jsou příliš základní. Takže jsem napsal tento krátký úvod CMake jako destilovanou verzi toho,co jsem zjistil po práci v dokumentech a po otázkách stackoverflow.

je to nedokončená práce a pokusím se ji neustále zlepšovat.

CMake je meta vybudovat nástroj, který umožňuje vytvářet nativní build skripty pro různé platformy:

  • Unix Makefiles
  • Editor
  • Visual Studio
  • CodeBlocks
  • Zatmění
  • a další…

Podívejte se na úplný seznam CMake generátory.

Předpokládejme, že máme jednoduchou aplikaci s jedním .soubor c.

vytvoříme soubor CMakeLists.txt v kořenovém adresáři našeho projektu.

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

to je vše, co potřebujeme, abychom mohli vytvořit naši aplikaci s některým z dostupných generátorů.

add_executable definuje náš binární soubor se všemi propojenými zdrojovými soubory.

install řekne cmake nainstalovat náš binární do bin adresář instalačního adresáře.

Building

CMake podporuje out-of-source buildy – takže celý náš kompilovaný kód jde do adresáře odděleného od zdrojů.

začít stavět bychom vytvořit novou složku:

mkdir _build
cd _build

volání cmake s cestou do projektu je kořen (v tomto případě nadřazené složky):

cmake ..

Tento bude generovat stavět skripty pomocí výchozí generátor — na Linuxu/OSX by to mělo být Makefiles.

ve výchozím nastavení cmake nainstaluje naše sestavení do systémových adresářů.
Chcete-li určit vlastní adresář instalace jsme jednoduše předat ji cmake:

cmake .. -DCMAKE_INSTALL_PREFIX=../_install

spustit build skriptu můžete jednoduše použít Makefile:

make
make install

nyní můžeme spustit naše binární z instalačního adresáře:

../_install/bin/myapp

Pokud bychom chtěli použít jiný generátor to předáme cmake pomocí -G parametr:

cmake .. -GXcode

Tento výstup vám bude snadno konfigurovat Xcode projekt na vybudování naší aplikaci.

Použití CMake s knihovnami

postavit knihovnu jsme použít podobný skript:

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 bude stavět knihovna jako libtest.a a nainstalujte jej do lib složky z adresáře instalace.
Máme také naše veřejné záhlaví souboru do instalace krok a říct cmake dát do include.

Namísto statické knihovny můžeme budovat společnou lib:

add_library(test SHARED test.c)

Propojení knihoven do spustitelné soubory s CMake

můžeme rozšířit naše spustitelný z výše propojením na náš libray libtest.a.

začněme přidáním adresáře knihovny jako podadresáře do našeho projektu myapp.

Nyní můžeme použít knihovnu definovanou v CMakeLists.txt libtest_project v 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 knihovna test definovanými v libtestproject k dispozici pro sestavení.
V target_link_libraries řekneme CMake, aby ji propojil s naším spustitelným souborem. CMake se ujistěte, že nejprve sestavit test před propojením s myapp.

včetně externích knihoven využívajících jiné systémy sestavení

zatímco CMake se těší rostoucímu zájmu, stále existuje spousta knihoven používajících nativní systémy sestavení, jako jsou Unix Makefiles. Můžete je využít ve svém projektu CMake, aniž byste museli přepisovat své skripty sestavení.

Vše, co potřebujeme, je CMake je podpora pro externí projekty a importované knihovny:

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 nám umožňuje přidat externí projekt jako cíl našeho projektu. Pokud nechcete zadat příkazy jako BUILD_COMMAND nebo INSTALL_COMMAND, CMake bude vypadat na CMakeLists.txt v externím projektu a spusťte jej.
v našem případě chceme využít knihovnu luajit, která je postavena pomocí Makefile.

add_library podporuje import již vytvořených knihoven – stačí nastavit jeho vlastnost IMPORTED_LOCATION.
Volání ExternalProject_Add určuje pouze externí projekt jako cíl, ale automaticky jej nevytváří. Bude postavena pouze tehdy, pokud k ní přidáme závislost. Proto voláme add_dependencies, aby naše importovaná knihovna byla závislá na externím projektu.

konečně můžeme propojit naši importovanou knihovnu stejně jako“ normální „knihovnu s target_link_libraries.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *