Rozumienie CMakeLists

Poznanie tego jak działają pliki CMakeLists.txt

CMake

W naszym wprowadzającym samouczku, użyliśmy CMake jako systemu budowania dla naszej aplikacji, lecz uwagę poświęciliśmy tylko jednemu z naszych CMakeLists. Tutaj w szczegółach przejdziemy przez to jak działają CMakeLists.

CMake jest użyteczny, bo umożliwia zautomatyzowanie większości rzeczy, które muszą się wydarzyć przez zbudowaniem programu.

CMakeLists.txt

Możesz pamiętać ten plik CMakeLists z pierwszego samouczka:

 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)

Pierwszy wiersz, project(helloworld) określa nazwę projektu.

Po tym, ustawiamy wersje narzędzi, które potrzebujemy. cmake_minimum_required(VERSION 3.10) ustawia wersję CMake, którą będziemy wywoływać. Używamy set do określania zmiennych (KF5_MIN_VERSION oraz QT_MIN_VERSION) zawierające wersje Szkieletów KDE oraz Qt.

Następnie przechodzimy do obszaru, w którym dodajemy kilka wymaganych ustawień CMake oraz KDE. Nie musisz się zbytnio przejmować tymi wierszami teraz i nie będziemy musieli ich zmieniać w tym samouczku.

Następujący obszar jest ważny, bo określa, które zależności wciągniemy podczas budowania programu. Spójrzmy na pierwszy wiersz:

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

  • find_package znajduje i wczytuje zewnętrzne składniki.
  • Pierwszym słowem jest słowo szkieletu (KF5).
  • Następnie wywołujemy zmienną z wersjami, które ustawiliśmy w drugim wierszu.
  • COMPONENTS jest parametrem, który poprzedza dany składnik szkieletu, który dołączymy.
  • Każde słowo po COMPONENTS odnosi się do danego składnika.

Ostatni wiersz, add_subdirectory(src), wskazuje CMake na katalog ‘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)

Ponieważ najwięcej robi pierwszy wiersz, to ten może być krótszy.

  • set jest używany do ustawienia helloworld_SRCS na main.cpp orazresources.qrc (jeśli postanowimy stworzyć dodatkowe pliki C++, to także będziemy musieli je tutaj dodać)
  • add_executable zajmie się nazwaniem pliku wykonywalnego i pobraniem wszystkich plików potrzebnych do jego stworzenia
  • target_link_libraries dynamicznie dowiązuje biblioteki użyte w naszym kodzie do naszego pliku wykonywalnego.

To ustawienie będzie użyteczne podczas rozwijania większości aplikacji Kirigami.