Razumevanje CMakeLists
CMake
V naši uvodni vaji smo uporabili CMake](https://cmake.org/) kot sistem gradnje za našo aplikacijo, vendar smo bili le resnično pozorni na eno od naših datotek CMakeLists.txt
. Tukaj bomo podrobneje preučili, kako to deluje.
CMake je uporaben, ker nam omogoča avtomatizacijo veliko stvari, ki jih je treba storiti pred prevajanjem.
CMakeLists.txt
Morda se spomnite datoteke CMakeLists.txt
iz prve vaje:
|
|
Prva vrstica, cmake_minimum_required(VERSION 3.16)
nastavi različico CMake, ki jo bomo klicali.
Po tem project(helloworld)
določa ime projekta.
Nato pridemo do odseka, kjer vključujemo številne potrebne nastavitve CMake in KDE z uporabo extra-cmake-modules. Naj vas ne skrbi preveč glede teh vrstic za zdaj, ne bomo jih spreminjali v tej vaji.
Naslednji razdelek je pomemben, ker določa, katere odvisnosti bomo vnesli med prevajanjem. Poglejmo prvega:
|
|
- find_package() najde in naloži zunanjo komponento.
- Prva beseda je okvir Qt.
${QT_MAJOR_VERSION}
je priročna spremenljivka, ki jo zagotavljajo moduli extra-cmake-modules, ki nam omogoča izbiro uporabljene različice Qt 5 ali 6, odvisno od tega, ali uporabljamo zastavico CMake-DBUILD_WITH_QT6=ON
. REQUIRED
pove CMake, da so te odvisnosti res zahtevane in da bo končal delo z napako, če paketa ni mogoče najti.NO_MODULE
preklopi CMake v način konfiguracije. Za to nam trenutno ni treba skrbeti.COMPONENTS
je parameter, ki je pred posebnimi sestavnimi deli ogrodja, ki ga bomo vključili.- Vsaka beseda za
COMPONENTS
se nanaša na določeno komponento.
Opomba
Če iščete, da bi dodali kako komponento iz seznama KDE API documentation v vašo aplikacijo, prevedite desno od stranske vrstice, kako dodati komponento s CMake. Na primer za
Kirigami2
, boste našli nekaj podobnega kot find_package(KF5Kirigami2)
, ki z dodatkom extra-cmake-modules postane nekaj podobnega kot find_package(KF5 COMPONENTS Kirigami2)
.
Bodite pozorni na svoje vključene komponente, prav tako kot na izpuščene iz naše kode saj bodo preprečile, da bi se naša aplikacija prevedla.
Zadnja vrstica omogoča, da CMake natisne, katere pakete je našel. In nad tem add_subdirectory(src)
usmeri CMake v imenik src/
, kjer najde drugo datoteko CMakeLists.txt
:
|
|
Ker večino težkega dela opravi prva datoteka, je ta precej krajša.
- add_executable() skrbi za generiranje naše izvršljive datoteke.
- target_sources() nam omogoča dodajanje datotek, ki jih bo uporabljala naša nova izvršljiva datoteka.
- target_link_libraries() dinamično povezuje knjižnice, uporabljene v naši kodi, z našo izvršljivo datoteko. Kirigami tukaj ni vključen, ker uporabljamo samo njegov modul QML.
- install() postavi našo izvršljivo datoteko na pravo mesto z uporabo
${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
, priročne spremenljivke, ki jo zagotavlja KDEInstallDirs v extra-cmake-modules, ki namesti izvedljive datoteke in knjižnice na svoje pravo mesto namesto vas, ne da bi morali določiti absolutno pot, podobno kot GNUInstallDirs.
Opomba
Upoštevajte, da bi se te knjižnice morale ujemati s komponentami, ki smo jih vključili v našo prejšnjo datotekoCMakeLists.txt
- v nasprotnem primeru te komponente ne bodo vključene in naša aplikacija ne bo prevedena.Ta nastavitev bo uporabna pri razvoju večine programov oz. aplikacij Kirigami.