Difference between revisions of "Build Tools"
(→Tool Chains: Depreciate Autotools) |
m (→Autotools: typo) |
||
Line 27: | Line 27: | ||
=== Autotools === | === Autotools === | ||
− | To set up or configure the '''Gnucash-docs''' build system, we used the [https://en.wikipedia.org/wiki/GNU_Build_System GNU Build System], often referred to as "autotools". We | + | To set up or configure the '''Gnucash-docs''' build system, we used the [https://en.wikipedia.org/wiki/GNU_Build_System GNU Build System], often referred to as "autotools". We plan to drop it in Gnucash 4.9xx! |
It's a complex and capable system for configuring and building a wide range of projects on a wide range of platforms. [https://autotools.io/index.html The Autotools Mythbuster] provides an excellent tutorial and reference for those wishing to learn about creating and building projects using the system. | It's a complex and capable system for configuring and building a wide range of projects on a wide range of platforms. [https://autotools.io/index.html The Autotools Mythbuster] provides an excellent tutorial and reference for those wishing to learn about creating and building projects using the system. |
Revision as of 15:07, 13 September 2020
The GnuCash project uses several different tools to build the program, the docs, and OS specific packages.
Basic Tools
These control the build process at a low level.
Make
Make is a build automation tool that builds targets from source by interpreting recipe files called Makefiles which specify how to transform the source file(s) into the target file(s). Many "Integrated Development Environments" or "IDEs" use make
(or its Microsoft cousin nmake
) to perform the build. Makefiles can be written by hand (as is the case for gnucash-htdocs.git) or generated by Autotools or CMake. Make can be invoked recursively to build complex programs and use file timestamps to only recompile files and libraries where a dependency has been changed. Makefiles ususally specify a number of targets of the build which may be supplied as arguments when make is called to perform specific actions to produce specific outputs.
Ninja
Ninja is a small build system with a focus on speed. It is designed to have its input files generated by a higher-level build system, and it is designed to run builds as fast as possible.
- Note
- The commands change then from
make [target]
toninja [target]
. - Note
- Some Linux distributions name the command
ninja-build
to distinguish it from another program calledninja
.
A comparison of CMake with the make utility is available here
CMake is commonly used to configure ninja
build files: To do so pass -G Ninja
among the cmake
arguments.
Tool Chains
In addition, GnuCash uses different tool chains to control the basic tools mentioned above. The program makes use of the CMake as the base of its tool chain, while the user documentation uses the Autotools as the base of the tool chain. The website is compiled directly using Make. The API documentation is created from the source code using Make or Ninja, depending on how the source code build system is configured.
CMake
To set up or configure the program build system, we use CMake. It should also be used for the Gnucash-docs.
It is a cross-platform free and open-source software application for managing the build process of software using a compiler-independent method. It supports directory hierarchies and applications that depend on multiple libraries. It is used in conjunction with native build environments such as make, Apple's Xcode, and Microsoft Visual Studio. It has minimal dependencies, requiring only a C++ compiler on its own build system. At present, CMake is primarily used to configure the build system by creating the input files for either the make or the ninja build programs which compile and link the program and its libraries. These utilities also control installation of the program and libraries. See CMake#GnuCash Configuration Variables.
Autotools
To set up or configure the Gnucash-docs build system, we used the GNU Build System, often referred to as "autotools". We plan to drop it in Gnucash 4.9xx!
It's a complex and capable system for configuring and building a wide range of projects on a wide range of platforms. The Autotools Mythbuster provides an excellent tutorial and reference for those wishing to learn about creating and building projects using the system.
For those who simply need to build the documentation from source, the following three commands will suffice:
autogen.sh
: Checks that all required parts of the build system are installed, then builds theconfigure
program from its source,configure.ac
and the intermediate MakefilesMakefile.in
from their sourceMakefile.am
. You'll runautogen.sh
after you first clonegnucash-docs.git
, any time you edit aMakefile.am
orconfigure.ac
, and any time you pull commits with changes to those files. Since it does no harm to run it unnecessarily we recommend that you run it after anygit pull
.- (not required, but suggested)
mkdir .build cd .build
- Note
- configure and make commands are run from this ${BUILDDIR} while sources are edited in the parental ${SOURCEDIR}.
configure
: This shell script, generated byautogen.sh
as described above, examines your system and its arguments to convert the intermediateMakefile.in<code> to <code>Makefile
that themake
command will use to actually generate the documentation product files. One can get a listing of the arguments and environment variables that any particularconfigure
understands by runningconfigure --help
.make
: UsingMakefile
as a template,make
runs the various programs and scripts needed to perform the build. Its arguments are the targets to be built; there are two special targets,make check
runs tests to ensure that the project has been built correctly andmake install
moves the build products to the locations from which they may be used.
Return to: