Search code examples
c++qtcmakearchlinuxkde-plasma

make failed after successful CMake run


So, I am trying to follow this tutorial, I copied the code and CMakeLists.txt, which I later edited. Now when I run cmake everything is fine, but then when I run make it just fail with this error:

main.cpp:1:10: fatal error: QApplication: No such file or directory
1 | #include <QApplication>
  |          ^~~~~~~~~~~~~~

Here is my CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(kparttut1)

set(QT_MIN_VERSION "5.11.0")
set(KF_MIN_VERSION "5.55.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)
include(ECMInstallIcons)
include(FeatureSummary)

find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core Gui Widgets)

find_package(KF5 ${KF_MIN_VERSION} REQUIRED COMPONENTS
    CoreAddons
    Crash
    DBusAddons
    DocTools
    I18n
    XmlGui
    TextEditor
    Parts
)

set(kparttut1_SRCS
main.cpp
mainwindow.cpp
)

add_executable(kparttut1 main.cpp)

########### install files ###############

#install(TARGETS kparttut1 ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})

#install(FILES kparttut1ui.rc 
#    DESTINATION  ${DATA_INSTALL_KXMLGUI5DIR}/kparttut)

#feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)

I am using latest Arch Linux with Qt version 5.15.2


Solution

  • The tutorial you followed has some problem, you should check the KF5 tutorial which has a correct CMake setup.

    You did the find_package thing, but you forgot to link the library to your executable!

    In CMake, linking to a library adds compile definitions, include directory and of course linking to the library.

    Here's what to add to make it work:

    target_link_libraries(kparttut1 PUBLIC
        Qt5::Widgets
        KF5::CoreAddons
        KF5::I18n
        KF5::WidgetsAddons
    )
    

    This adds all the necessary stuff to the compiler arguments so all linked libraries are found.