|
|
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.
| + | #REDIRECT [[Build Tools#CMake]] |
− | | |
− | * http://www.cmake.org/Wiki/CMake_FAQ FAQ
| |
− | * http://www.cmake.org/HTML/Download.html - Download
| |
− | * http://www.cmake.org/HTML/Documentation.html - The same page which you also get by "man cmake".
| |
− | * http://websvn.kde.org/trunk/KDE/kdelibs/cmake/modules/ - 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.
| |
− | * [http://llvm.org/docs/CMakePrimer.html LLVM's CMake Primer], a more programmer-oriented tutorial than the one in the CMake documentation.
| |
− | | |
− | == Building ==
| |
− | Please see [[Building#CMake]].
| |
− | | |
− | == GnuCash Configuration Variables ==
| |
− | GnuCash's CMakeLists.txt defines the following configuration options and defaults:
| |
− | {|border=1
| |
− | !width="128" | Option
| |
− | !width="256" | Description
| |
− | !width="64" | 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
| |
− | |-
| |
− | | ENABLE_DEBUG || Compile with debugging flags set || (implicit) OFF
| |
− | |-
| |
− | |}
| |
− | | |
− | 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:
| |
− | * 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.
| |
− | | |
− | == FAQ ==
| |
− | ===How can you change between a Debug and Release build===
| |
− | :Use the options <tt>-DCMAKE_BUILD_TYPE=Debug</tt> or <tt>-DCMAKE_BUILD_TYPE=Release</tt> 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 http://www.cmake.org/Wiki/CMake_Useful_Variables
| |
− | | |
− | ===Which C preprocessor macros tell me whether I'm on Windows or Linux?===
| |
− | :See http://www.cmake.org/Wiki/CMake_Platform_Dependent_Issues#The_Platforms_.2F_Compilers_Table:
| |
− | #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?===
| |
− | :Se http://www.cmake.org/Wiki/CMake_Useful_Variables#System_.26_Compiler_Information
| |
− | 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 <tt>IF (UNIX)</tt>
| |
− | :* For Windows issues which concern either Mingw or MSVC, you would use <tt>IF (MINGW)</tt> or <tt>IF (MSVC)</tt>, respectively.
| |
− | :* For Windows issues which hold for both compilers, you would use<tt>IF (WIN32)</tt>.
| |