Cu ceva timp în urmă, ne-am întâlnit cu autotools. În ciuda faptului că autotools este încă folosit în multe proiecte celebre cu instrument open source care poate fi numit cu greu o deosebit de convenabil. În plus, funcționează în mod normal, numai în sistemele * nix, iar în unele ferestre autotools de a utiliza, să spunem, este foarte dificil. În general, autotools - Legacy este, și programatori normale ale timpului nostru încercând să folosească CMake sau, de exemplu, SCons. În acest articol ne vom uita la CMake.
Utilizarea CMake în cel mai simplu caz este după cum urmează. La rădăcina magazia este creat un fișier CMakeLists.txt despre acest conținut:
cmake_minimum_required (VERSIUNEA 3.1)
find_library (PTHREAD_LIBRARY pthread)
find_library (pcre PCRE_LIBRARY)
include_directories (includ)
set (CMAKE_CXX_STANDARD 17)
set (CMAKE_CXX_STANDARD_REQUIRED on)
Set (CMAKE_CXX_FLAGS "$ -Wall -Wextra -Werror")
add_executable (src principal / main.cpp src / HttpServer.cpp)
Din fericire, o linie de aici, care înseamnă nu este necesar să se explice. Apoi, sursa de adăugat în fișierele de director src și antet - în directorul includ. Pentru a construi zicala proiect:
mkdir construi
cd construi
cmake.
face
Simplu, nu-i așa?
În plus față de find_library mai sus în CMake are un număr de script-uri pentru biblioteci specifice pentru conexiune. În special, conexiunea OpenGL este ceva de genul:
find_package (OpenGL OBLIGATORIU)
CMake, puteți specifica un anumit tip de Makefiles pe care doriți să obțineți de ieșire:
În special, mulți programatori pentru a accelera construi proiecte preferă să utilizeze Ninja:
cmake -G Ninja.
ninja -j1
Alegeți între depanare și eliberarea se face după cum construiește urmează:
cmake -DCMAKE_BUILD_TYPE = Release -G Ninja.
cmake -DCMAKE_BUILD_TYPE = RelWithDebInfo -G Ninja.
cmake -DCMAKE_BUILD_TYPE = MinSizeRel -G Ninja.
# Default Debug
cmake -DCMAKE_BUILD_TYPE = Debug -G Ninja.
In loc de a rula direct face sau ninja pot spune ceva de genul:
cmake --build. --config lansare --target principal
Puteți selecta un compilator special pentru a construi proiectul
cmake -DCMAKE_C_COMPILER = `care gcc` \
-DCMAKE_CXX_COMPILER = `care g ++` -G Ninja.
... precum și să ofere steaguri suplimentare de compilare:
cmake -DCMAKE_C_FLAGS = "-O0 -g" -DCMAKE_CXX_FLAGS = "-O0 -g".
cmake -DCMAKE_C_FLAGS = "-O0 -g -fprofile-arce -ftest-acoperire" \
-DCMAKE_EXE_LINKER_FLAGS = "-lgcov".
In C / C ++ mondial se întâmplă adesea ca bibliotecile terță parte care utilizează CMake, conectate la proiect folosind sabmoduley Git. Conectarea acestor biblioteci la proiect este relativ simplu:
cmake_minimum_required (versiunea 2.8)
include_directories (dependențele / algoritmi / includ)
add_subdirectory (dependențele / algoritmi / src)
add_executable (rbtree_example.c rbtree_example)
target_link_libraries (CAlgorithms rbtree_example)
La rândul său, fișierul / CMakeList.txt biblioteca src ar trebui să fie ceva de genul:
cmake_minimum_required (versiunea 2.8)
add_library (CAlgorithms STATIC
struct / ilist.c
struct / rbtree.c
struct / htable.c
comună / utils.c
)
În general, add_subdirectory poate lua calea către orice director în care CMakeLists.txt fișier. Acest lucru vă permite să împartă proiectul în subproiecte chiar și într-un singur depozit. Din nou, în cazul bibliotecilor, vă permite să pună testele într-un sub-proiect separat, care nu vor fi colectate atunci când vă conectați la o serie de proiecte de bibliotecă terță parte.
De exemplu, radacina CMakeList.txt biblioteca ar putea fi:
cmake_minimum_required (versiunea 2.8)
add_subdirectory (src)
add_subdirectory (test)
Testele adăugate direct la proiect, după cum urmează:
cmake_minimum_required (versiunea 2.8)
Set (CMAKE_C_FLAGS "$ -O0 -g")
add_executable (test_htable.c test_htable)
target_link_libraries (CAlgorithms test_htable)
add_executable (test_rbtree.c test_rbtree)
target_link_libraries (CAlgorithms test_rbtree)
add_test (test_htable "./test_htable")
add_test (test_rbtree "./test_rbtree")
Rularea testul se efectuează cu o simplă comandă:
face testul
# Sau cu includerea de ieșire de depanare:
face ARGS de test = "-V"
# Sau dacă utilizați Ninja:
test de ninja
... făcut în directorul construi.
Dacă utilizați orice PyTest. doar adăugați la CMakeList.txt ceva de genul:
find_package (PythonInterp OBLIGATORIU)
add_test (python_test NAME
COMMAND py.test --capture = nu $ /tests/run.py)
test la ieșire este scris în / fișiere temporare / LastTest.log Testare. De altfel, detaliile variabilelor de mediu disponibile în CMake, cum ar fi CMAKE_SOURCE_DIR, pot fi găsite aici.
În plus față de caracteristicile de mai sus pot fi adesea găsite pentru a construi proiecte cu diferite opțiuni de asistență. În special, este utilizat în Assimp și LLDB. Când construi proiectul sunt selectate opțiuni:
cmake -DLLDB_DISABLE_CURSES: BOOL = TRUE.
cmake -DASSIMP_BUILD_ASSIMP_TOOLS = OPRIT.
Opțiunile sunt în general descrise în documentația, dar într-un vârf de cuțit pot fi vizualizate și de blesteme interfață:
Într-un post, desigur, nu este posibil să se ia în considerare toate posibilitățile CMake. Cu toate acestea, informațiile furnizate mai sus ar trebui să fie suficientă în 90% din cazuri. Exemple de lucru complete de utilizare a CMake, veți găsi, de exemplu, în acest sens. acest lucru. precum și în depozitele de pe GitHub. Exemple de utilizare a opțiunilor și declarații condiționale pot fi găsite în depozitele deja menționate Assimp și LLDB. Și, desigur, o mulțime de utile pot fi găsite pe site-ul oficial al CMake.
Și dacă utilizați CMake și, în caz afirmativ, dacă utilizarea unora dintre capacitățile sale, care nu au fost descrise mai sus?
Ca și postul? Împărtășește cu alții:
(Trebuie să includeți JS)