Förstå CMakeLists

Att begripa hur CMakeLists.txt-filer fungerar

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. Här går vi igenom hur CMakeLists 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 från den första handledningen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cmake_minimum_required(VERSION 3.16)
project(helloworld)

set(KF_MIN_VERSION "5.68.0")
set(QT_MIN_VERSION "5.12.0")

find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)

set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})

include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)

find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Quick Test Gui QuickControls2 Widgets)
find_package(KF5 ${KF_MIN_VERSION} REQUIRED COMPONENTS Kirigami2 I18n CoreAddons)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_subdirectory(src)

feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)

Den första raden, project(helloworld) definierar projektets namn.

Därefter anger vi versionerna av verktygen vi behöver. cmake_minimum_required(VERSION 3.10) anger versionen av CMake vi anropar. Därefter använder vi set för att definiera variabler (KF5_MIN_VERSION och QT_MIN_VERSION) som innehåller versionerna av KDE Ramverk och Qt.

Därefter kommer vi till en sektion där vi inkluderar ett antal nödvändiga CMake- och KDE-inställningar. 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 kompileringstid. Låt oss titta på den första raden:

find_package(KF5 ${KF5_MIN_VERSION} COMPONENTS Kirigami2 I18n CoreAddons WidgetsAddons)

  • find_package hittar och läser in den externa komponenten.
  • Det första ordet är ramverket (KF5).
  • Därefter anropar vi variabeln med versionerna vi angav på den andra raden.
  • 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.

Den sista raden, add_subdirectory(src), pekar CMake på katalogen 'src'.

1
2
add_executable(helloworld main.cpp resources.qrc)
target_link_libraries(helloworld Qt5::Quick Qt5::Qml Qt5::Gui Qt5::QuickControls2 Qt5::Widgets KF5::Kirigami2 KF5::I18n)

Eftersom mycket av själva arbetet görs av den första filen, är den här mycket kortare.

  • set används för att tilldela helloworld_SRCS till main.cpp och resources.qrc (om vi bestämmer oss för att lägga till ytterligare C++ filer behöver vi lägga till dem här också)
  • add_executable tar hand om att namnge vårt körbara program och hämta filerna som behövs för att skapa den
  • target_link_libraries länkar biblioteken som används i vår kod till vårt körbara program dynamiskt.

Inställningen är användbar när vi utvecklar de flesta program i Kirigami.