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