Difference between revisions of "CMake"
(→GnuCash Program Configuration Variables: Remove ENABLE_DEBUG, it doesn't exist in GnuCash's CMakeLists.txt.) |
(Update most CMake links) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
CMake is a build system which replaces automake/autoconf (the "autotools") and the shell scripts which were produced by the autotools. Similar to the autotools, the actual build on Linux is done through Makefiles. CMake supports Linux, Windows/mingw, Windows/MSVC and other platforms. | CMake is a build system which replaces automake/autoconf (the "autotools") and the shell scripts which were produced by the autotools. Similar to the autotools, the actual build on Linux is done through Makefiles. CMake supports Linux, Windows/mingw, Windows/MSVC and other platforms. | ||
− | * | + | * [{{URL:cmake-wiki|FAQ}} FAQ] |
− | * | + | * [{{URL:cmake}}download/ Download CMake] |
− | * | + | * [{{URL:cmake}}documentation/ Documentation] - The same page which you also get by "man cmake". |
− | * http://websvn.kde.org/trunk/KDE/kdelibs/cmake/modules/ - Potentially helpful additional macros | + | * <s>http://websvn.kde.org/trunk/KDE/kdelibs/cmake/modules/</s> [Moved, probably related: {{URL:cmake}}cmake/help/latest/module/FindKDE4.html] - Potentially helpful additional macros |
* [https://samthursfield.wordpress.com/2015/11/21/cmake-dependencies-between-targets-and-files-and-custom-commands/ A blog post] about handling dependencies and targets for custom build commands. | * [https://samthursfield.wordpress.com/2015/11/21/cmake-dependencies-between-targets-and-files-and-custom-commands/ A blog post] about handling dependencies and targets for custom build commands. | ||
− | * [ | + | * [{{URL:llvm}}docs/CMakePrimer.html LLVM's CMake Primer], a more programmer-oriented tutorial than the one in the CMake documentation. |
*[https://crascit.com/professional-cmake/ Professional CMake: A Practical Guide], ~ US $30 | *[https://crascit.com/professional-cmake/ Professional CMake: A Practical Guide], ~ US $30 | ||
Line 52: | Line 52: | ||
To change from a default define the option on the cmake command line, e.g. <tt>-DWITH_PYTHON=ON</tt>. | To change from a default define the option on the cmake command line, e.g. <tt>-DWITH_PYTHON=ON</tt>. | ||
Other CMake variables you may need to define: | Other CMake variables you may need to define: | ||
− | + | :;CMAKE_BUILD_TYPE: <tt>Debug</tt>, <tt>Release</tt>, or … [https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html CMake Manual] | |
− | + | :;CMAKE_INSTALL_PREFIX: The target installation directory, defaults to <tt>/usr/local</tt>. | |
− | + | :;CMAKE_PREFIX_PATH: A ';' separated list of paths where dependencies are installed. No default. | |
+ | :;GNC_DBD_DIR: The location of the dbi-driver libraries, required for the SQL backends. | ||
+ | |||
+ | ;See also: [[Dependency Graphs]] | ||
== FAQ == | == FAQ == | ||
Line 67: | Line 70: | ||
===Which variables are set in CMake when running CMakeLists.txt?=== | ===Which variables are set in CMake when running CMakeLists.txt?=== | ||
− | :That's a long list. See | + | :That's a long list. See [{{URL:cmake-wiki}}Useful-Variables CMake Wiki: CMake_Useful_Variables] |
===Which C preprocessor macros tell me whether I'm on Windows or Linux?=== | ===Which C preprocessor macros tell me whether I'm on Windows or Linux?=== | ||
− | :See | + | :See [{{URL:cmake-wiki}}Platform-Dependent-Issues#the-platforms--compilers-table CMake Wiki: Platform-Dependent-Issues#the-platforms--compilers-table]: |
#ifdef __linux // For linux-only code | #ifdef __linux // For linux-only code | ||
// ... | // ... | ||
Line 82: | Line 85: | ||
===How can I check in the CMakeLists.txt code whether I'm on Windows or Linux?=== | ===How can I check in the CMakeLists.txt code whether I'm on Windows or Linux?=== | ||
− | : | + | :See [{{URL:cmake-wiki}}Useful-Variables#system--compiler-information CMake Wiki: System & Compiler Information] |
IF (UNIX) # All unix-like OS's, including Apple OS X (and Cygwin) | IF (UNIX) # All unix-like OS's, including Apple OS X (and Cygwin) | ||
# ... | # ... |
Latest revision as of 23:20, 5 October 2024
CMake is a build system which replaces automake/autoconf (the "autotools") and the shell scripts which were produced by the autotools. Similar to the autotools, the actual build on Linux is done through Makefiles. CMake supports Linux, Windows/mingw, Windows/MSVC and other platforms.
- FAQ
- Download CMake
- Documentation - The same page which you also get by "man cmake".
-
http://websvn.kde.org/trunk/KDE/kdelibs/cmake/modules/[Moved, probably related: https://cmake.org/cmake/help/latest/module/FindKDE4.html] - Potentially helpful additional macros - A blog post about handling dependencies and targets for custom build commands.
- LLVM's CMake Primer, a more programmer-oriented tutorial than the one in the CMake documentation.
- Professional CMake: A Practical Guide, ~ US $30
Contents
- 1 Building
- 2 GnuCash Documentation Configuration Variables
- 3 GnuCash Program Configuration Variables
- 4 FAQ
- 4.1 How can you change between a Debug and Release build
- 4.2 How can I see the actual compiler commands: Verbose mode?
- 4.3 Which variables are set in CMake when running CMakeLists.txt?
- 4.4 Which C preprocessor macros tell me whether I'm on Windows or Linux?
- 4.5 How can I check in the CMakeLists.txt code whether I'm on Windows or Linux?
Building
Please see Building On Linux#Build using CMake and Ninja.
GnuCash Documentation Configuration Variables
They are in Initializing_Documentation_Build_Environment#CMake.
GnuCash Program Configuration Variables
GnuCash's CMakeLists.txt defines the following configuration options and defaults:
Option | Description | Default |
---|---|---|
WITH_SQL | Build this project with SQL (libdbi) support | ON |
WITH_AQBANKING | Build this project with aqbanking (online banking) support | ON |
WITH_GNUCASH | Build all of GnuCash, not just the library | ON |
WITH_CUTECASH | Also build cutecash | Removed in 3.x |
WITH_OFX | Compile with ofx support (needs LibOFX) | ON |
WITH_PYTHON | Enable python plugin and bindings | OFF |
ENABLE_BINRELOC | Compile with binary relocation support | ON |
ENABLE_REGISTER2 | Compile with register2 enabled | OFF |
DISABLE_NLS | Do not use Native Language Support | OFF |
DISABLE_DEPRECATED_GLIB | Don't use deprecated glib functions | OFF |
DISABLE_DEPRECATED_GTK | Don't use deprecated gtk, gdk or gdk-pixbuf functions | OFF |
DISABLE_DEPRECATED_GNOME | Don't use deprecated gnome functions | OFF |
ALLOW_OLD_GETTEXT | allow to configure build with a gettext version older than 0.19.6. Some files will not be translated! | OFF |
To change from a default define the option on the cmake command line, e.g. -DWITH_PYTHON=ON. Other CMake variables you may need to define:
- CMAKE_BUILD_TYPE
- Debug, Release, or … CMake Manual
- CMAKE_INSTALL_PREFIX
- The target installation directory, defaults to /usr/local.
- CMAKE_PREFIX_PATH
- A ';' separated list of paths where dependencies are installed. No default.
- GNC_DBD_DIR
- The location of the dbi-driver libraries, required for the SQL backends.
- See also
- Dependency Graphs
FAQ
How can you change between a Debug and Release build
- Use the options -DCMAKE_BUILD_TYPE=Debug or -DCMAKE_BUILD_TYPE=Release when calling CMake, or change the Variable CMAKE_BUILD_TYPE directly in the CMakeCache.txt file.
How can I see the actual compiler commands: Verbose mode?
By default, cmake builds the makefiles with verbose mode disabled. You can enable this verbose mode when calling make by the argument VERBOSE=1, like so:
make VERBOSE=1
Alternatively, you can switch on the verbose mode for the cmake configuration by setting the variable CMAKE_VERBOSE_MAKEFILE=on, like so:
cmake -DCMAKE_VERBOSE_MAKEFILE=on .
Which variables are set in CMake when running CMakeLists.txt?
- That's a long list. See CMake Wiki: CMake_Useful_Variables
Which C preprocessor macros tell me whether I'm on Windows or Linux?
#ifdef __linux // For linux-only code // ... #ifdef _WIN32 // For Windows-MSVC and Windows-Cygwin, but *not* Windows-mingw // ... #ifdef __MINGW32__ // For Windows-mingw // ... #ifdef _MSC_VER // For only Windows-MSVC // ...
- Note: These macros do not result from CMake; instead, they exist in the respective build system already. Hence, those macros can be used regardless whether cmake is used or not.
How can I check in the CMakeLists.txt code whether I'm on Windows or Linux?
IF (UNIX) # All unix-like OS's, including Apple OS X (and Cygwin) # ... IF (WIN32) # All windows versions (including Cygwin) # ... IF (MINGW) # Mingw compiler on windows # ... IF (MSVC) # Microsoft compiler on windows # ...
- In other words:
- For Unix-only stuff you would write IF (UNIX)
- For Windows issues which concern either Mingw or MSVC, you would use IF (MINGW) or IF (MSVC), respectively.
- For Windows issues which hold for both compilers, you would useIF (WIN32).