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
.