Förstå CMakeLists
CMake
I vår inledande handledning, använde vi CMake som byggsystem för vårt program, men vi har egentligen bara uppmärksammat en av våra CMakeLists.txt
. Här går vi igenom hur det fungerar lite mer detaljerat.
CMake är användbart eftersom det låter oss automatisera mycket av grejorna som måste göras innan kompilering.
CMakeLists.txt
Du kanske kommer ihåg filen CMakeLists.txt
från den första handledningen:
|
|
Första raden, cmake_minimum_required(VERSION 3.16)
ställer in version av CMake som vi anropar.
Därefter definierar project(helloworld)
projektets namn.
Därefter kommer vi till en sektion där vi inkluderar ett antal nödvändiga CMake- och KDE-inställningar genom att använda extra-cmake-modules. Du behöver inte bekymra dig så mycket om raderna för tillfället, och vi behöver inte ändra dem i den här handledningen.
Den följande sektionen är viktig, eftersom den anger vilka beroenden vi tar med vid kompileringstillfället. Låt oss titta på den första:
|
|
- find_package() hittar och läser in den externa komponenten.
- Det första ordet är ramverket, Qt.
${QT_MAJOR_VERSION}
är en bekvämlighetsvariabel som tillhandahålls av extra-cmake-moduler som låter oss välja Qt-versionen som ska användas, 5 eller 6, beroende på om vi använder CMake-flaggan-DBUILD_WITH_QT6=ON
. REQUIRED
talar om för CMake beroendena verkligen krävs och att det ska avslutas med ett fel om paketet inte kan hittas.NO_MODULE
ställer om CMake till läget Config. Vi behöver inte bry oss om det för tillfället.COMPONENTS
är en parameter som föregår de specifika komponenterna för ramverket vi inkluderar.- Varje ord efter
COMPONENTS
refererar till en specifik komponent.
Anmärkning
Om du funderar på att lägga till några komponenter som listas i KDE:s dokumentation över programmeringsgränssnittet i ditt program, kan du titta i höger sidorad om hur komponenten läggs till med CMake. Till exempel, för
Kirigami2
, hittar du något som find_package(KF5Kirigami2)
, som med tillägg av [extra-cmake-modules](https://api.kde.org/ecm /) blir något i stil med find_package(KF5 COMPONENTS Kirigami2)
.
Var uppmärksam på dina inkluderade komponenter, eftersom att utelämna de som används ivår kod förhindrar vår program från att kompileras.
Den sista raden låter CMake skriva ut vilka paket som har hittats, Och ovanför den pekar add_subdirectory(src)
CMake på katalogen 'src/', där en annan CMakeLists.txt
finns:
|
|
Eftersom mycket av själva arbetet görs av den första filen, är den här mycket kortare.
- add_executable() tar hand om att generera vårt körbara program.
- target_sources() låter oss lägga till filer som används av vårt nya körbara program.
- target_link_libraries länkar biblioteken som används i vår kod till vårt körbara program dynamiskt. Kirigami inkluderas inte här eftersom vi bara använder dess QML-modul.
- install() placerar vår körbara fil på rätt plats genom att använda
${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
, en bekvämlighetsvariabel som tillhandahålls av KDEInstallDirs i extra-cmake-modules som installerar körbara filer och bibliotek på rätt plats åt dig utan att behöva ange den absoluta sökvägen, på liknande sätt som GNUInstallDirs.
Anmärkning
Observera att biblioteken ska motsvara komponenterna som vi inkluderade i vår tidigareCMakeLists.txt
, annars inkluderas inte komponenterna och vårt program går inte att kompilera.Inställningen är användbar när vi utvecklar de flesta program i Kirigami.