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, »project(helloworld)«, določa ime projekta.
Zatem nastavljamo različice zahtevanih orodij. cmake_minimum_required(VERSION 3.16)
določa različico CMake, ki jo bomo klicali. Nato uporabimo set()
za določanje spremenljivk (KF5_MIN_VERSION
in QT_MIN_VERSION
), ki vsebujejo različice Ogrodja KDE in Qt.
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, saj določa, katere odvisnosti bomo vključili v času prevajanja. Poglejmo prvo vrstico:
find_package(KF5 ${KF5_MIN_VERSION} COMPONENTS Kirigami2 I18n CoreAddons WidgetsAddons)
- find_package() najde in naloži zunanjo komponento.
- Prva beseda je ogrodje (
KF5
). - Potem kličemo spremenljivko z različicami, ki smo jih nastavili v drugi vrstici.
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.
Končna vrstica,add_subdirectory(src)
, kaže CMake v imenik src/
.
|
|
Ker večino težkega dela opravi prva datoteka, je ta precej krajša.
- set() se uporablja za nastavitev
helloworld_SRCS
namain.cpp
inresources.qrc
(če se odločimo za ustvarjanje dodatnih datotek C++, jih bomo morali dodati tudi tukaj) - add_executable() skrbi za poimenovanje naše izvršilne datoteke in pridobivanje datotek, ki so potrebne za njeno izdelavo
- target_link_libraries dinamično povezuje knjižnice, uporabljene v naši kodi, z našo izvršitveno datoteko.
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.