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. To format the files you have to invoke the target with make
134 clang-format or ninja clang-format. Once the project is formatted it
135 is recommended to enforce the formatting using a pre-commit hook, this
136 can be done using KDEGitCommitHooks.
137
138 The .clang-format file from ECM will be copied to the source directory.
139 This file should not be added to version control. It is recommended to
140 add it to the .gitignore file: /.clang-format.
141
142 Since 5.79: If the source folder already contains a .clang-format file
143 it is not overwritten.
144
145 Example usage:
146
147 include(KDEClangFormat)
148 file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h)
149 kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
150
151 To exclude directories from the formatting add a .clang-format file in
152 the directory with the following contents:
153
154 DisableFormat: true
155 SortIncludes: false
156
157 Since 5.64
158
159 KDECompilerSettings
160 Set useful compile and link flags for C++ (and C) code.
161
162 Enables many more warnings than the default, and sets stricter modes
163 for some compiler features. By default, exceptions are disabled;
164 kde_target_enable_exceptions() can be used to re-enable them for a spe‐
165 cific target.
166
167 NB: it is recommended to include this module with the NO_POLICY_SCOPE
168 flag, otherwise you may get spurious warnings with some versions of
169 CMake.
170
171 This module provides the following functions:
172
173 kde_source_files_enable_exceptions([file1 [file2 [...]]])
174
175 Enables exceptions for specific source files. This should not be used
176 on source files in a language other than C++.
177
178 kde_target_enable_exceptions(target <INTERFACE|PUBLIC|PRIVATE>)
179
180 Enables exceptions for a specific target. This should not be used on a
181 target that has source files in a language other than C++.
182
183 kde_enable_exceptions()
184
185 Enables exceptions for C++ source files compiled for the CMakeLists.txt
186 file in the current directory and all subdirectories.
187
188 Since pre-1.0.0.
189
190 KDEFrameworkCompilerSettings
191 Set stricter compile and link flags for KDE Frameworks modules.
192
193 The KDECompilerSettings module is included and, in addition, various
194 defines that affect the Qt libraries are set to enforce certain conven‐
195 tions.
196
197 For example, constructions like QString(“foo”) are prohibited, instead
198 forcing the use of QLatin1String or QStringLiteral, and some Qt-defined
199 keywords like signals and slots will not be defined.
200
201 NB: it is recommended to include this module with the NO_POLICY_SCOPE
202 flag, otherwise you may get spurious warnings with some versions of
203 CMake.
204
205 Since pre-1.0.0.
206
207 KDEGitCommitHooks
208 This module provides a functionality to enforce formatting or in the
209 future other QS checks.
210
211 This module provides the following function:
212
213 kde_configure_pre_commit_hook(
214 CHECKS <check1> [<check2> [...]]
215 )
216
217 This function will create a pre-commit hook which contains all the
218 given checks.
219
220 Checks:
221
222 · CLANG_FORMAT With this check enabled the git clang-format tool will
223 be used to make sure that the changed parts are properly formatted.
224 In case the changes are not properly formatted an error message with
225 the command to preview the formatting changes and to format the files
226 in place will be displayed. This tool will reuse the exsting
227 .clang-format file, in case you want to use the one provided by ECM
228 you can include include(KDEClangFormat) which will copy the file to
229 the source dir. It is also recommended to reformat the entire project
230 before enforcing the formatting using this commit hook.
231
232 Example usage:
233
234 include(KDEGitCommitHooks)
235 kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
236
237 Since 5.79
238
239 KDEInstallDirs
240 Define KDE standard installation directories.
241
242 Note that none of the variables defined by this module provide any
243 information about the location of already-installed KDE software.
244
245 Also sets CMAKE_INSTALL_PREFIX to the installation prefix of ECM,
246 unless that variable has been already explicitly set by something else
247 (since 5.61 and with CMake >= 3.7).
248
249 Inclusion of this module defines the following variables:
250
251 KDE_INSTALL_<dir>
252 destination for files of a given type
253
254 KDE_INSTALL_FULL_<dir>
255 corresponding absolute path
256
257 where <dir> is one of (default values in parentheses and alternative,
258 deprecated variable name in square brackets):
259
260 BUNDLEDIR
261 application bundles (/Applications/KDE) [BUNDLE_INSTALL_DIR]
262
263 EXECROOTDIR
264 executables and libraries (<empty>) [EXEC_INSTALL_PREFIX]
265
266 BINDIR user executables (EXECROOTDIR/bin) [BIN_INSTALL_DIR]
267
268 SBINDIR
269 system admin executables (EXECROOTDIR/sbin) [SBIN_INSTALL_DIR]
270
271 LIBDIR object code libraries (EXECROOTDIR/lib, EXECROOTDIR/lib64 or
272 EXECROOTDIR/lib/<multiarch-tuple on Debian) [LIB_INSTALL_DIR]
273
274 LIBEXECDIR
275 executables for internal use by programs and libraries (BINDIR
276 on Windows, LIBDIR/libexec otherwise) [LIBEXEC_INSTALL_DIR]
277
278 CMAKEPACKAGEDIR
279 CMake packages, including config files (LIBDIR/cmake) [CMAKECON‐
280 FIG_INSTALL_PREFIX]
281
282 QTPLUGINDIR
283 Qt plugins (LIBDIR/plugins or qmake-qt5’s QT_INSTALL_PLUGINS)
284 [QT_PLUGIN_INSTALL_DIR]
285
286 PLUGINDIR
287 Plugins (QTPLUGINDIR) [PLUGIN_INSTALL_DIR]
288
289 QTQUICKIMPORTSDIR
290 QtQuick1 imports (QTPLUGINDIR/imports or qmake-qt5’s
291 QT_INSTALL_IMPORTS) [IMPORTS_INSTALL_DIR]
292
293 QMLDIR QtQuick2 imports (LIBDIR/qml or qmake-qt5’s QT_INSTALL_QML)
294 [QML_INSTALL_DIR]
295
296 INCLUDEDIR
297 C and C++ header files (include) [INCLUDE_INSTALL_DIR]
298
299 LOCALSTATEDIR
300 modifiable single-machine data (var)
301
302 SHAREDSTATEDIR
303 modifiable architecture-independent data (com)
304
305 DATAROOTDIR
306 read-only architecture-independent data root (share)
307 [SHARE_INSTALL_PREFIX]
308
309 DATADIR
310 read-only architecture-independent data (DATAROOTDIR)
311 [DATA_INSTALL_DIR]
312
313 DOCBUNDLEDIR
314 documentation bundles generated using kdoctools (DATAROOT‐
315 DIR/doc/HTML) [HTML_INSTALL_DIR]
316
317 KCFGDIR
318 kconfig description files (DATAROOTDIR/config.kcfg)
319 [KCFG_INSTALL_DIR]
320
321 KCONFUPDATEDIR
322 kconf_update scripts (DATAROOTDIR/kconf_update)
323 [KCONF_UPDATE_INSTALL_DIR]
324
325 KSERVICES5DIR
326 services for KDE Frameworks 5 (DATAROOTDIR/kservices5) [SER‐
327 VICES_INSTALL_DIR]
328
329 KSERVICETYPES5DIR
330 service types for KDE Frameworks 5 (DATAROOTDIR/kservicetypes5)
331 [SERVICETYPES_INSTALL_DIR]
332
333 KXMLGUI5DIR
334 knotify description files (DATAROOTDIR/kxmlgui5) [KXML‐
335 GUI_INSTALL_DIR]
336
337 KTEMPLATESDIR
338 Kapptemplate and Kdevelop templates (kdevappwizard/templates)
339
340 KNOTIFY5RCDIR
341 knotify description files (DATAROOTDIR/knotifications5) [KNOTI‐
342 FYRC_INSTALL_DIR]
343
344 ICONDIR
345 icons (DATAROOTDIR/icons) [ICON_INSTALL_DIR]
346
347 LOCALEDIR
348 knotify description files (DATAROOTDIR/locale)
349 [LOCALE_INSTALL_DIR]
350
351 SOUNDDIR
352 sound files (DATAROOTDIR/sounds) [SOUND_INSTALL_DIR]
353
354 TEMPLATEDIR
355 templates (DATAROOTDIR/templates) [TEMPLATES_INSTALL_DIR]
356
357 WALLPAPERDIR
358 desktop wallpaper images (DATAROOTDIR/wallpapers) [WALLPA‐
359 PER_INSTALL_DIR]
360
361 APPDIR application desktop files (DATAROOTDIR/applications) Since
362 1.1.0. [XDG_APPS_INSTALL_DIR]
363
364 DESKTOPDIR
365 desktop directories (DATAROOTDIR/desktop-directories)
366 [XDG_DIRECTORY_INSTALL_DIR]
367
368 MIMEDIR
369 mime description files (DATAROOTDIR/mime/packages)
370 [XDG_MIME_INSTALL_DIR]
371
372 METAINFODIR
373 AppStream component metadata files (DATAROOTDIR/metainfo)
374
375 QTQCHDIR
376 documentation bundles in QCH format for Qt-extending libraries
377 (DATAROOTDIR/doc/qch or qmake-qt5’s QT_INSTALL_DOCS) Since
378 5.36.0.
379
380 QCHDIR documentation bundles in QCH format (DATAROOTDIR/doc/qch) Since
381 5.36.0.
382
383 MANDIR man documentation (DATAROOTDIR/man) [MAN_INSTALL_DIR]
384
385 INFODIR
386 info documentation (DATAROOTDIR/info)
387
388 DBUSDIR
389 D-Bus (DATAROOTDIR/dbus-1)
390
391 DBUSINTERFACEDIR
392 D-Bus interfaces (DBUSDIR/interfaces) [DBUS_INTER‐
393 FACES_INSTALL_DIR]
394
395 DBUSSERVICEDIR
396 D-Bus session services (DBUSDIR/services) [DBUS_SER‐
397 VICES_INSTALL_DIR]
398
399 DBUSSYSTEMSERVICEDIR
400 D-Bus system services (DBUSDIR/system-services) [DBUS_SYS‐
401 TEM_SERVICES_INSTALL_DIR]
402
403 SYSCONFDIR
404 read-only single-machine data (etc, or /etc if
405 CMAKE_INSTALL_PREFIX is /usr) [SYSCONF_INSTALL_DIR]
406
407 CONFDIR
408 application configuration files (SYSCONFDIR/xdg) [CON‐
409 FIG_INSTALL_DIR]
410
411 AUTOSTARTDIR
412 autostart files (CONFDIR/autostart) [AUTOSTART_INSTALL_DIR]
413
414 LOGGINGCATEGORIESDIR
415 Qt logging categories files directory (DATAROOTDIR/qlogging-cat‐
416 egories5) Since 5.59.0
417
418 JARDIR Java AAR/JAR files for Android. Since 5.62.0
419
420 SYSTEMDUNITDIR
421 Systemd Units (lib/systemd) [SYSTEMD_UNIT_INSTALL_DIR]. Since
422 5.65
423
424 SYSTEMDUSERUNITDIR
425 Systemd User Units (lib/systemd/user) [SYS‐
426 TEMD_USER_UNIT_INSTALL_DIR]. Since 5.65
427
428 If KDE_INSTALL_USE_QT_SYS_PATHS is set to TRUE before including this
429 module, the default values for some variables are instead queried from
430 Qt5’s qmake (where mentioned in the parentheses above). If not set, it
431 will default to TRUE if Qt5’s qmake is found and it’s QT_INSTALL_PREFIX
432 is the same as CMAKE_INSTALL_PREFIX, otherwise default to FALSE. This
433 variable should NOT be set from within CMakeLists.txt files, instead is
434 intended to be set manually when configuring a project which uses KDE‐
435 InstallDirs (e.g. by packagers).
436
437 If KDE_INSTALL_DIRS_NO_DEPRECATED is set to TRUE before including this
438 module, the deprecated variables (listed in the square brackets above)
439 are not defined.
440
441 In addition, for each KDE_INSTALL_* variable, an equivalent
442 CMAKE_INSTALL_* variable is defined. If KDE_INSTALL_DIRS_NO_DEPRECATED
443 is set to TRUE, only those variables defined by the GNUInstallDirs mod‐
444 ule (shipped with CMake) are defined. If
445 KDE_INSTALL_DIRS_NO_CMAKE_VARIABLES is set to TRUE, no variables with a
446 CMAKE_ prefix will be defined by this module (other than
447 CMAKE_INSTALL_DEFAULT_COMPONENT_NAME - see below).
448
449 The KDE_INSTALL_<dir> variables (or their CMAKE_INSTALL_<dir> or depre‐
450 cated counterparts) may be passed to the DESTINATION options of
451 install() commands for the corresponding file type. They are set in
452 the CMake cache, and so the defaults above can be overridden by users.
453
454 Note that the KDE_INSTALL_<dir>, CMAKE_INSTALL_<dir> or deprecated form
455 of the variable can be changed using CMake command line variable defi‐
456 nitions; in either case, all forms of the variable will be affected.
457 The effect of passing multiple forms of the same variable on the com‐
458 mand line (such as KDE_INSTALL_BINDIR and CMAKE_INSTALL_BINDIR is unde‐
459 fined.
460
461 The variable KDE_INSTALL_TARGETS_DEFAULT_ARGS is also defined (along
462 with the deprecated form INSTALL_TARGETS_DEFAULT_ARGS). This should be
463 used when libraries or user-executable applications are installed, in
464 the following manner:
465
466 install(TARGETS mylib myapp ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
467
468 It MUST NOT be used for installing plugins, system admin executables or
469 executables only intended for use internally by other code. Those
470 should use KDE_INSTALL_PLUGINDIR, KDE_INSTALL_SBINDIR or
471 KDE_INSTALL_LIBEXECDIR respectively.
472
473 Additionally, CMAKE_INSTALL_DEFAULT_COMPONENT_NAME will be set to
474 ${PROJECT_NAME} to provide a sensible default for this CMake option.
475
476 Note that mixing absolute and relative paths, particularly for BINDIR,
477 LIBDIR and INCLUDEDIR, can cause issues with exported targets. Given
478 that the default values for these are relative paths, relative paths
479 should be used on the command line when possible (eg: use
480 -DKDE_INSTALL_LIBDIR=lib64 instead of -DKDE_INSTALL_LIB‐
481 DIR=/usr/lib/lib64 to override the library directory).
482
483 Since pre-1.0.0.
484
485 NB: The variables starting KDE_INSTALL_ are available since 1.6.0,
486 unless otherwise noted with the variable.
487
488 The KDE_INSTALL_PREFIX_SCRIPT option will install a
489 ${CMAKE_INSTALL_PREFIX}/prefix.sh file that allows to easily incorpo‐
490 rate the necessary environment variables for the prefix into a process.
491
492 KDETemplateGenerator
493 Packages KApptemplate/KDevelop compatible application templates
494
495 This module provides a functionality to package in a tarball and
496 install project templates compatible with the format used by KApptem‐
497 plate and KDevelop. Useful for providing minimal examples for the usage
498 of the KDE Frameworks.
499
500 This module provides the following function:
501
502 kde_package_app_templates(TEMPLATES <template> [<template> [...]]
503 INSTALL_DIR <directory>)
504
505 INSTALL_DIR is the directory to install the template package to. In
506 most cases you will want to use the variable KDE_INSTALL_KTEMPLATESDIR
507 from KDEInstallDirs.
508
509 TEMPLATES lists subdirectories containing template files; each <tem‐
510 plate> directory will be packaged into a file named <template>.tar.bz2
511 and installed to the appropriate location.
512
513 The template is a minimal source tree of an application as if it was an
514 application project by itself, with names (file names or text inside)
515 the text files replaced by the following placeholders when needed:
516
517 %{PROJECTDIRNAME}
518 name of generated project base folder ex: %{APPNAMELC} for
519 KAppTemplate
520
521 %{APPNAME}
522 project name as entered by user ex: MyKApp
523
524 %{APPNAMELC}
525 project name in lower case ex: mykapp
526
527 %{APPNAMEUC}
528 project name in upper case ex: MYKAPP
529
530 %{CPP_TEMPLATE}
531 license header for cpp file
532
533 %{H_TEMPLATE}
534 license header for h file
535
536 %{AUTHOR}
537 author name ex: George Ignacious
538
539 %{EMAIL}
540 author email ex: foo@bar.org
541
542 %{VERSION}
543 project version ex: 0.1
544
545 Deprecated:
546
547 %{dest}
548 path of generated project base folder, used in .kdevtemplate
549 with the ShowFilesAfterGeneration entry KDevelop >= 5.1.1 sup‐
550 ports relative paths with that entry, making this placeholder
551 obsolete
552
553 Multiple templates can be passed at once.
554
555 Since 5.18
556
558 ecm(7), ecm-modules(7), ecm-find-modules(7)
559
561 KDE Developers
562
563
564
565
5665.79 Feb 06, 2021 ECM-KDE-MODULES(7)