FindKDE4¶
注意
此模块专门用于 KDE 4 版本,该版本已过时且不再维护。对于使用 CMake 和 KDE 技术进行现代应用程序开发,请使用新版本的 KDE,并参考 KDE 文档。
查找 KDE 4 安装
find_package(KDE4 [...])
此模块是以下上游 KDE 4 模块的包装器
FindKDE4Internal.cmake
上游内部模块,用于查找 KDE 4 的包含目录、库和 KDE 特定的预处理器工具。它提供了构建 KDE 4 软件的使用要求,并定义了几个辅助命令以简化在 CMake 中使用 KDE 4 的工作。
KDE4Macros.cmake上游实用模块,定义了在 CMake 中使用 KDE 4 的所有附加 KDE4 特定命令。例如:
kde4_automoc()、kde4_add_executable()、kde4_add_library()、kde4_add_ui_files()、kde4_add_ui3_files()、kde4_add_kcfg_files()、kde4_add_kdeinit_executable()等。
上游 KDE 4 模块由 KDE 4 发行版包安装在 $KDEDIRS/share/apps/cmake/modules/。在调用 find_package(KDE4) 时,此路径会自动追加到 CMAKE_MODULE_PATH 变量,因此可以使用 include() 命令在项目中包含任何额外的 KDE 4 模块。例如:
KDE4Defaults.cmake上游内部模块,设置了一些有用的 CMake 选项,但不是构建 KDE 4 软件所必需的。如果应使用这些设置,请在找到 KDE 4 后包含此模块。
find_package(KDE4) include(KDE4Defaults)
有关用法详情,请参阅上游 KDE 4 文档。例如,在 FindKDE4Internal 模块的顶部,提供了这些模块提供的所有变量和命令的完整文档。
结果变量¶
此模块定义了以下变量
KDE4_FOUND一个布尔值,指示是否找到 KDE 4。此变量由上游
FindKDE4Internal模块设置。
提示¶
此模块在调用 find_package(KDE4) 之前接受以下变量
ENV{KDEDIRS}包含 KDE 4 安装路径的环境变量。
KDE 4 按以下顺序在以下目录中搜索
KDEDIRS环境变量/opt/kde4路径
示例¶
示例:基本用法¶
将 KDE 4 查找为必需项并在 CMake 中使用它
find_package(KDE4 REQUIRED)
set(sources main.cpp mywidget.cpp mypart.cpp)
# The kde4_*() commands are provided by the KDE4Macros module, which is
# included automatically by FindKDE4, if KDE4 is found:
kde4_automoc(${sources})
kde4_add_executable(example ${sources})
target_include_directories(example PRIVATE ${KDE4_INCLUDES})
target_link_libraries(example PRIVATE ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS})
install(TARGETS example DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES kfoo.desktop DESTINATION ${XDG_APPS_DIR})
示例:功能齐全的示例¶
在以下示例中,此模块用于查找 KDE 4 安装。
project(kfoo)
find_package(KDE4 REQUIRED)
# Append path from where to include local project modules if any:
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include_directories(${KDE4_INCLUDE_DIRS})
add_definitions(${KDE4_DEFINITIONS})
set(sources main.cpp myappl.cpp view.cpp)
# If Qt designer UI files version 3 or 4 are available add them to the
# sources variable:
kde4_add_ui_files(sources maindialog.ui logindialog.ui)
kde4_add_ui3_files(sources printerdlg.ui previewdlg.ui)
# If there are files for the kconfig_compiler add them this way:
kde4_add_kcfg_files(sources settings.kcfg)
# When everything is listed, probably automoc is wanted:
kde4_automoc(${sources})
# Finally, specify what to build:
kde4_add_executable(kfoo ${sources})
kde4_add_executable() 命令是 CMake 命令 add_executable() 的稍微扩展的版本。此外,它还会进行一些 RPATH 处理,并支持 KDE4_ENABLE_FINAL 变量。第一个参数是可执行文件的名称,后面跟着源文件列表。如果需要创建库而不是可执行文件,可以使用 kde4_add_library()。它是 add_library() 命令的扩展版本。它增加了对 KDE4_ENABLE_FINAL 变量的支持,在 Windows 上,它将 -DMAKE_KFOO_LIB 添加到编译标志中。
find_package(KDE4 REQUIRED)
# ...
kde4_add_library(kfoo ${sources})
# Optionally, set the library version number if needed:
set_target_properties(kfoo PROPERTIES VERSION 5.0.0 SOVERSION 5)
KDE 是高度模块化的,因此,如果需要创建 KPart、控制中心模块或 ioslave,方法如下:
find_package(KDE4 REQUIRED)
# ...
kde4_add_plugin(kfoo ${sources})
现在,应用程序/库/插件可能需要链接到一些库。为此,请使用标准的 target_link_libraries() 命令。对于每个 KDE 库,都有以 KDE4_FOO_LIBS 形式提供的变量。使用它们还可以获取所有依赖库。
target_link_libraries(kfoo ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS})
示例:kdeinit 可执行文件¶
在以下示例中,创建了所谓的 kdeinit 可执行文件。kde4_add_kdeinit_executable() 命令会创建一个给定名称的可执行文件和一个以 kdeinit_ 为前缀的给定名称的库。target_link_libraries() 命令将所有必需的库添加到 kdeinit_kbar 库中,然后将 kbar 链接到 kdeinit_kbar。
find_package(KDE4 REQUIRED)
# ...
kde4_add_kdeinit_executable(kbar ${kbarSources})
target_link_libraries(kdeinit_kbar ${KDE4_KIO_LIBS})
target_link_libraries(kbar kdeinit_kbar)
install(TARGETS kbar DESTINATION ${CMAKE_INSTALL_BINDIR})
install(TARGETS kdeinit_kbar DESTINATION ${CMAKE_INSTALL_LIBDIR})
示例:移除编译定义¶
有时,需要移除传递给编译器的默认编译定义。可以使用 remove_definitions() 命令。例如,默认情况下,KDE4 构建系统会设置 -DQT_NO_STL 标志。如果项目代码使用了 Qt STL 兼容层的一部分,则应移除此标志。
find_package(KDE4 REQUIRED)
add_definitions(${KDE4_DEFINITIONS})
# ...
remove_definitions(-DQT_NO_STL)