Difference between revisions of "CMake"

From GnuCash
Jump to: navigation, search
(GnuCash Documentation Configuration Variables)
(GnuCash Program Configuration Variables: Remove ENABLE_DEBUG, it doesn't exist in GnuCash's CMakeLists.txt.)
Line 47: Line 47:
 
|-
 
|-
 
| ALLOW_OLD_GETTEXT || allow to configure build with a gettext version older than 0.19.6. Some files will not be translated! || 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
 
 
|-
 
|-
 
|}
 
|}

Revision as of 15:28, 30 April 2023

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.

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_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.

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 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 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).