1ECM-KDE-MODULES(7) Extra CMake Modules ECM-KDE-MODULES(7)
2
3
4
6 ecm-kde-modules - ECM KDE Modules Reference
7
9 Extra CMake Modules (ECM) provides several modules that provide default
10 settings (like installation directories, compiler flags and other CMake
11 options) aimed at software produced by the KDE modules; these are docu‐
12 mented here. ECM also provides modules with more general functionality,
13 documented in ecm-modules(7), and ones that extend the functionality of
14 the find_package command, documented in ecm-find-modules(7).
15
16 To use these modules, you need to tell CMake to find the ECM package,
17 and then add either ${ECM_MODULE_PATH} or ${ECM_KDE_MODULE_DIR} to the
18 CMAKE_MODULE_PATH variable:
19
20 find_package(ECM REQUIRED NO_MODULE)
21 set(CMAKE_MODULE_PATH ${ECM_MODULE_DIR})
22
23 Using ${ECM_MODULE_PATH} will also make the other types of modules
24 available.
25
27 KDECMakeSettings
28 Changes various CMake settings to what the KDE community views as more
29 sensible defaults.
30
31 It is recommended to include this module with the NO_POLICY_SCOPE flag,
32 otherwise you may get spurious warnings with some versions of CMake.
33
34 It is split into three parts, which can be independently disabled if
35 desired.
36
37 Runtime Paths
38 The default runtime path (used on Unix systems to search for dynami‐
39 cally-linked libraries) is set to include the location that libraries
40 will be installed to (as set in LIB_INSTALL_DIR or, if the former is
41 not set, KDE_INSTALL_LIBDIR), and also the linker search path.
42
43 Note that LIB_INSTALL_DIR or alternatively KDE_INSTALL_LIBDIR needs to
44 be set before including this module. Typically, this is done by
45 including the KDEInstallDirs module.
46
47 This section can be disabled by setting KDE_SKIP_RPATH_SETTINGS to TRUE
48 before including this module.
49
50 Testing
51 Testing is enabled by default, and an option (BUILD_TESTING) is pro‐
52 vided for users to control this. See the CTest module documentation in
53 the CMake manual for more details.
54
55 This section can be disabled by setting KDE_SKIP_TEST_SETTINGS to TRUE
56 before including this module.
57
58 Build Settings
59 Various CMake build defaults are altered, such as searching source and
60 build directories for includes first, enabling automoc by default.
61
62 When find_package(ECM 5.38) or higher is called, this also selects a
63 layout for the build dir that helps running executables without
64 installing: all executables are built into a toplevel “bin” dir, making
65 it possible to find helper binaries, and to find uninstalled plugins
66 (provided that you use kcoreaddons_add_plugin or set LIBRARY_OUT‐
67 PUT_DIRECTORY as documented on
68 https://community.kde.org/Guidelines_and_HOWTOs/Making_apps_run_uninstalled).
69
70 This section can be disabled by setting KDE_SKIP_BUILD_SETTINGS to TRUE
71 before including this module.
72
73 This section also provides an “uninstall” target that can be individu‐
74 ally disabled by setting KDE_SKIP_UNINSTALL_TARGET to TRUE before
75 including this module.
76
77 By default on OS X, X11 and XCB related detections are disabled. How‐
78 ever if the need would arise to use these technologies, the detection
79 can be enabled by setting APPLE_FORCE_X11 to ON.
80
81 A warning is printed for the developer to know that the detection is
82 disabled on OS X. This message can be turned off by setting APPLE_SUP‐
83 PRESS_X11_WARNING to ON.
84
85 Since pre-1.0.0.
86
87 ENABLE_CLAZY option is added (OFF by default) when clang is being used.
88 Turning this option on will force clang to load the clazy plugins for
89 richer warnings on Qt-related code.
90
91 If clang is not being used, this won’t have an effect. See
92 https://commits.kde.org/clazy?path=README.md
93
94 Since 5.17.0
95
96 · Uninstall target functionality since 1.7.0.
97
98 · APPLE_FORCE_X11 option since 5.14.0 (detecting X11 was previously the
99 default behavior)
100
101 · APPLE_SUPPRESS_X11_WARNING option since 5.14.0
102
103 · CMAKE_AUTORCC enabled by default when supported by cmake (>= 3.0)
104 since 5.62.0
105
106 Translations
107 A fetch-translations target will be set up that will download transla‐
108 tions for projects using l10n.kde.org.
109
110 KDE_L10N_BRANCH will be responsible for choosing which l10n branch to
111 use for the translations.
112
113 KDE_L10N_AUTO_TRANSLATIONS (OFF by default) will indicate whether
114 translations should be downloaded when building the project.
115
116 Since 5.34.0
117
118 KDE_L10N_SYNC_TRANSLATIONS (OFF by default) will download the transla‐
119 tions at configuration time instead of build time.
120
121 Since 5.50.0
122
123 KDEClangFormat
124 This module provides a functionality to format the source code of your
125 repository according to a predefined KDE clang-format file.
126
127 This module provides the following function:
128
129 kde_clang_format(<files>)
130
131 Using this function will create a clang-format target that will format
132 all <files> passed to the function with the predefined KDE clang-format
133 style.
134
135 Example usage:
136
137 include(KDEClangFormat)
138 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES src/*.cpp src/*.h)
139 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
140
141 Since 5.64
142
143 KDECompilerSettings
144 Set useful compile and link flags for C++ (and C) code.
145
146 Enables many more warnings than the default, and sets stricter modes
147 for some compiler features. By default, exceptions are disabled;
148 kde_target_enable_exceptions() can be used to re-enable them for a spe‐
149 cific target.
150
151 NB: it is recommended to include this module with the NO_POLICY_SCOPE
152 flag, otherwise you may get spurious warnings with some versions of
153 CMake.
154
155 This module provides the following functions:
156
157 kde_source_files_enable_exceptions([file1 [file2 [...]]])
158
159 Enables exceptions for specific source files. This should not be used
160 on source files in a language other than C++.
161
162 kde_target_enable_exceptions(target <INTERFACE|PUBLIC|PRIVATE>)
163
164 Enables exceptions for a specific target. This should not be used on a
165 target that has source files in a language other than C++.
166
167 kde_enable_exceptions()
168
169 Enables exceptions for C++ source files compiled for the CMakeLists.txt
170 file in the current directory and all subdirectories.
171
172 Since pre-1.0.0.
173
174 KDEFrameworkCompilerSettings
175 Set stricter compile and link flags for KDE Frameworks modules.
176
177 The KDECompilerSettings module is included and, in addition, various
178 defines that affect the Qt libraries are set to enforce certain conven‐
179 tions.
180
181 For example, constructions like QString(“foo”) are prohibited, instead
182 forcing the use of QLatin1String or QStringLiteral, and some Qt-defined
183 keywords like signals and slots will not be defined.
184
185 NB: it is recommended to include this module with the NO_POLICY_SCOPE
186 flag, otherwise you may get spurious warnings with some versions of
187 CMake.
188
189 Since pre-1.0.0.
190
191 KDEInstallDirs
192 Define KDE standard installation directories.
193
194 Note that none of the variables defined by this module provide any
195 information about the location of already-installed KDE software.
196
197 Inclusion of this module defines the following variables:
198
199 KDE_INSTALL_<dir>
200 destination for files of a given type
201
202 KDE_INSTALL_FULL_<dir>
203 corresponding absolute path
204
205 where <dir> is one of (default values in parentheses and alternative,
206 deprecated variable name in square brackets):
207
208 BUNDLEDIR
209 application bundles (/Applications/KDE) [BUNDLE_INSTALL_DIR]
210
211 EXECROOTDIR
212 executables and libraries (<empty>) [EXEC_INSTALL_PREFIX]
213
214 BINDIR user executables (EXECROOTDIR/bin) [BIN_INSTALL_DIR]
215
216 SBINDIR
217 system admin executables (EXECROOTDIR/sbin) [SBIN_INSTALL_DIR]
218
219 LIBDIR object code libraries (EXECROOTDIR/lib, EXECROOTDIR/lib64 or
220 EXECROOTDIR/lib/<multiarch-tuple on Debian) [LIB_INSTALL_DIR]
221
222 LIBEXECDIR
223 executables for internal use by programs and libraries (BINDIR
224 on Windows, LIBDIR/libexec otherwise) [LIBEXEC_INSTALL_DIR]
225
226 CMAKEPACKAGEDIR
227 CMake packages, including config files (LIBDIR/cmake) [CMAKECON‐
228 FIG_INSTALL_PREFIX]
229
230 QTPLUGINDIR
231 Qt plugins (LIBDIR/plugins or qmake-qt5’s QT_INSTALL_PLUGINS)
232 [QT_PLUGIN_INSTALL_DIR]
233
234 PLUGINDIR
235 Plugins (QTPLUGINDIR) [PLUGIN_INSTALL_DIR]
236
237 QTQUICKIMPORTSDIR
238 QtQuick1 imports (QTPLUGINDIR/imports or qmake-qt5’s
239 QT_INSTALL_IMPORTS) [IMPORTS_INSTALL_DIR]
240
241 QMLDIR QtQuick2 imports (LIBDIR/qml or qmake-qt5’s QT_INSTALL_QML)
242 [QML_INSTALL_DIR]
243
244 INCLUDEDIR
245 C and C++ header files (include) [INCLUDE_INSTALL_DIR]
246
247 LOCALSTATEDIR
248 modifiable single-machine data (var)
249
250 SHAREDSTATEDIR
251 modifiable architecture-independent data (com)
252
253 DATAROOTDIR
254 read-only architecture-independent data root (share)
255 [SHARE_INSTALL_PREFIX]
256
257 DATADIR
258 read-only architecture-independent data (DATAROOTDIR)
259 [DATA_INSTALL_DIR]
260
261 DOCBUNDLEDIR
262 documentation bundles generated using kdoctools (DATAROOT‐
263 DIR/doc/HTML) [HTML_INSTALL_DIR]
264
265 KCFGDIR
266 kconfig description files (DATAROOTDIR/config.kcfg)
267 [KCFG_INSTALL_DIR]
268
269 KCONFUPDATEDIR
270 kconf_update scripts (DATAROOTDIR/kconf_update)
271 [KCONF_UPDATE_INSTALL_DIR]
272
273 KSERVICES5DIR
274 services for KDE Frameworks 5 (DATAROOTDIR/kservices5) [SER‐
275 VICES_INSTALL_DIR]
276
277 KSERVICETYPES5DIR
278 service types for KDE Frameworks 5 (DATAROOTDIR/kservicetypes5)
279 [SERVICETYPES_INSTALL_DIR]
280
281 KXMLGUI5DIR
282 knotify description files (DATAROOTDIR/kxmlgui5) [KXML‐
283 GUI_INSTALL_DIR]
284
285 KTEMPLATESDIR
286 Kapptemplate and Kdevelop templates (kdevappwizard/templates)
287
288 KNOTIFY5RCDIR
289 knotify description files (DATAROOTDIR/knotifications5) [KNOTI‐
290 FYRC_INSTALL_DIR]
291
292 ICONDIR
293 icons (DATAROOTDIR/icons) [ICON_INSTALL_DIR]
294
295 LOCALEDIR
296 knotify description files (DATAROOTDIR/locale)
297 [LOCALE_INSTALL_DIR]
298
299 SOUNDDIR
300 sound files (DATAROOTDIR/sounds) [SOUND_INSTALL_DIR]
301
302 TEMPLATEDIR
303 templates (DATAROOTDIR/templates) [TEMPLATES_INSTALL_DIR]
304
305 WALLPAPERDIR
306 desktop wallpaper images (DATAROOTDIR/wallpapers) [WALLPA‐
307 PER_INSTALL_DIR]
308
309 APPDIR application desktop files (DATAROOTDIR/applications) Since
310 1.1.0. [XDG_APPS_INSTALL_DIR]
311
312 DESKTOPDIR
313 desktop directories (DATAROOTDIR/desktop-directories)
314 [XDG_DIRECTORY_INSTALL_DIR]
315
316 MIMEDIR
317 mime description files (DATAROOTDIR/mime/packages)
318 [XDG_MIME_INSTALL_DIR]
319
320 METAINFODIR
321 AppStream component metadata files (DATAROOTDIR/metainfo)
322
323 QTQCHDIR
324 documentation bundles in QCH format for Qt-extending libraries
325 (DATAROOTDIR/doc/qch or qmake-qt5’s QT_INSTALL_DOCS) Since
326 5.36.0.
327
328 QCHDIR documentation bundles in QCH format (DATAROOTDIR/doc/qch) Since
329 5.36.0.
330
331 MANDIR man documentation (DATAROOTDIR/man) [MAN_INSTALL_DIR]
332
333 INFODIR
334 info documentation (DATAROOTDIR/info)
335
336 DBUSDIR
337 D-Bus (DATAROOTDIR/dbus-1)
338
339 DBUSINTERFACEDIR
340 D-Bus interfaces (DBUSDIR/interfaces) [DBUS_INTER‐
341 FACES_INSTALL_DIR]
342
343 DBUSSERVICEDIR
344 D-Bus session services (DBUSDIR/services) [DBUS_SER‐
345 VICES_INSTALL_DIR]
346
347 DBUSSYSTEMSERVICEDIR
348 D-Bus system services (DBUSDIR/system-services) [DBUS_SYS‐
349 TEM_SERVICES_INSTALL_DIR]
350
351 SYSCONFDIR
352 read-only single-machine data (etc, or /etc if
353 CMAKE_INSTALL_PREFIX is /usr) [SYSCONF_INSTALL_DIR]
354
355 CONFDIR
356 application configuration files (SYSCONFDIR/xdg) [CON‐
357 FIG_INSTALL_DIR]
358
359 AUTOSTARTDIR
360 autostart files (CONFDIR/autostart) [AUTOSTART_INSTALL_DIR]
361
362 LOGGINGCATEGORIESDIR
363 Qt logging categories files directory (DATAROOTDIR/qlogging-cat‐
364 egories5) Since 5.59.0
365
366 JARDIR Java AAR/JAR files for Android. Since 5.62.0
367
368 SYSTEMDUNITDIR
369 Systemd Units (lib/systemd) [SYSTEMD_UNIT_INSTALL_DIR]. Since
370 5.65
371
372 SYSTEMDUSERUNITDIR
373 Systemd User Units (lib/systemd/user) [SYS‐
374 TEMD_USER_UNIT_INSTALL_DIR]. Since 5.65
375
376 If KDE_INSTALL_USE_QT_SYS_PATHS is set to TRUE before including this
377 module, the default values for some variables are instead queried from
378 Qt5’s qmake (where mentioned in the parentheses above). If not set, it
379 will default to TRUE if Qt5’s qmake is found and it’s QT_INSTALL_PREFIX
380 is the same as CMAKE_INSTALL_PREFIX, otherwise default to FALSE. This
381 variable should NOT be set from within CMakeLists.txt files, instead is
382 intended to be set manually when configuring a project which uses KDE‐
383 InstallDirs (e.g. by packagers).
384
385 If KDE_INSTALL_DIRS_NO_DEPRECATED is set to TRUE before including this
386 module, the deprecated variables (listed in the square brackets above)
387 are not defined.
388
389 In addition, for each KDE_INSTALL_* variable, an equivalent
390 CMAKE_INSTALL_* variable is defined. If KDE_INSTALL_DIRS_NO_DEPRECATED
391 is set to TRUE, only those variables defined by the GNUInstallDirs mod‐
392 ule (shipped with CMake) are defined. If
393 KDE_INSTALL_DIRS_NO_CMAKE_VARIABLES is set to TRUE, no variables with a
394 CMAKE_ prefix will be defined by this module (other than
395 CMAKE_INSTALL_DEFAULT_COMPONENT_NAME - see below).
396
397 The KDE_INSTALL_<dir> variables (or their CMAKE_INSTALL_<dir> or depre‐
398 cated counterparts) may be passed to the DESTINATION options of
399 install() commands for the corresponding file type. They are set in
400 the CMake cache, and so the defaults above can be overridden by users.
401
402 Note that the KDE_INSTALL_<dir>, CMAKE_INSTALL_<dir> or deprecated form
403 of the variable can be changed using CMake command line variable defi‐
404 nitions; in either case, all forms of the variable will be affected.
405 The effect of passing multiple forms of the same variable on the com‐
406 mand line (such as KDE_INSTALL_BINDIR and CMAKE_INSTALL_BINDIR is unde‐
407 fined.
408
409 The variable KDE_INSTALL_TARGETS_DEFAULT_ARGS is also defined (along
410 with the deprecated form INSTALL_TARGETS_DEFAULT_ARGS). This should be
411 used when libraries or user-executable applications are installed, in
412 the following manner:
413
414 install(TARGETS mylib myapp ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
415
416 It MUST NOT be used for installing plugins, system admin executables or
417 executables only intended for use internally by other code. Those
418 should use KDE_INSTALL_PLUGINDIR, KDE_INSTALL_SBINDIR or
419 KDE_INSTALL_LIBEXECDIR respectively.
420
421 Additionally, CMAKE_INSTALL_DEFAULT_COMPONENT_NAME will be set to
422 ${PROJECT_NAME} to provide a sensible default for this CMake option.
423
424 Note that mixing absolute and relative paths, particularly for BINDIR,
425 LIBDIR and INCLUDEDIR, can cause issues with exported targets. Given
426 that the default values for these are relative paths, relative paths
427 should be used on the command line when possible (eg: use
428 -DKDE_INSTALL_LIBDIR=lib64 instead of -DKDE_INSTALL_LIB‐
429 DIR=/usr/lib/lib64 to override the library directory).
430
431 Since pre-1.0.0.
432
433 NB: The variables starting KDE_INSTALL_ are available since 1.6.0,
434 unless otherwise noted with the variable.
435
436 The KDE_INSTALL_PREFIX_SCRIPT option will install a
437 ${CMAKE_INSTALL_PREFIX}/prefix.sh file that allows to easily incorpo‐
438 rate the necessary environment variables for the prefix into a process.
439
440 KDETemplateGenerator
441 Packages KApptemplate/KDevelop compatible application templates
442
443 This module provides a functionality to package in a tarball and
444 install project templates compatible with the format used by KApptem‐
445 plate and KDevelop. Useful for providing minimal examples for the usage
446 of the KDE Frameworks.
447
448 This module provides the following function:
449
450 kde_package_app_templates(TEMPLATES <template> [<template> [...]]
451 INSTALL_DIR <directory>)
452
453 INSTALL_DIR is the directory to install the template package to. In
454 most cases you will want to use the variable KDE_INSTALL_KTEMPLATESDIR
455 from KDEInstallDirs.
456
457 TEMPLATES lists subdirectories containing template files; each <tem‐
458 plate> directory will be packaged into a file named <template>.tar.bz2
459 and installed to the appropriate location.
460
461 The template is a minimal source tree of an application as if it was an
462 application project by itself, with names (file names or text inside)
463 the text files replaced by the following placeholders when needed:
464
465 %{PROJECTDIRNAME}
466 name of generated project base folder ex: %{APPNAMELC} for
467 KAppTemplate
468
469 %{APPNAME}
470 project name as entered by user ex: MyKApp
471
472 %{APPNAMELC}
473 project name in lower case ex: mykapp
474
475 %{APPNAMEUC}
476 project name in upper case ex: MYKAPP
477
478 %{CPP_TEMPLATE}
479 license header for cpp file
480
481 %{H_TEMPLATE}
482 license header for h file
483
484 %{AUTHOR}
485 author name ex: George Ignacious
486
487 %{EMAIL}
488 author email ex: foo@bar.org
489
490 %{VERSION}
491 project version ex: 0.1
492
493 Deprecated:
494
495 %{dest}
496 path of generated project base folder, used in .kdevtemplate
497 with the ShowFilesAfterGeneration entry KDevelop >= 5.1.1 sup‐
498 ports relative paths with that entry, making this placeholder
499 obsolete
500
501 Multiple templates can be passed at once.
502
503 Since 5.18
504
506 ecm(7), ecm-modules(7), ecm-find-modules(7)
507
509 KDE Developers
510
511
512
513
5145.68 Mar 19, 2020 ECM-KDE-MODULES(7)