Skip to content

Latest commit

 

History

History
101 lines (73 loc) · 2.93 KB

File metadata and controls

101 lines (73 loc) · 2.93 KB

Cmake on Unix/linux/MacOS/FreeBSD/OpenBSD

Created 26 April 2019 Updated 31 March 2026

Consider switching entirely to meson for your build.

Requires cmake of at least 3.12 as of 31 March 2026.

NOTE on build failing as strdup() missing

If certain gcc build options are used (for example -std=c99 ) gcc turns off some extensions. Beginning in v2.2.0 the build systems define _GNU_SOURCE so that the GNU extionsions are still visible. In their CMakeLists.txt for example, one wants

target_compile_definitions(dwarf PRIVATE _GNU_SOURCE)
target_compile_definitions(dwarfp PRIVATE _GNU_SOURCE)
target_compile_definitions(dwarf PRIVATE _GNU_SOURCE)

Unless a shared library is specifically requested cmake builds a static library: libdwarf.a

For cmake, ignore the autogen.sh script in the base source directory, autogen.sh is only for configure.

By default cmake builds just libdwarf and dwarfdump and libdwarf is a static (archive) library. To switch to a shared library output with cmake add the following to the cmake command:

-DBUILD_SHARED=YES -DBUILD_NON_SHARED=NO

Lets assume the base directory of the the libdwarf source in a directory named 'code' inside the directory '/path/to/' Always arrange to issue the cmake command in an empty directory.

If you are building a Shared Library you may need to install before running tests to allow the tests to work Use -DCMAKE_INSTALL_PREFIX=/some/path to chose the install path. You can install in any temporary directory or in system directories and the tests will work.

# build the fast way
mkdir /tmp/cmbld
cd /tmp/cmbld
cmake -G Ninja -DDO_TESTING:BOOL=TRUE /path/to/code
ninja
ninja test

# slower build
mkdir /tmp/cmbld
cd /tmp/cmbld
cmake -G "Unix Makefiles" -DDO_TESTING:BOOL=TRUE  /path/to/code
make
ctest -R self

It is best to specify -G explicitly since some versions of cmake seem to have a different default for -G than others.

On Windows msys2 -DBUILD_SHARED=YES will build libdwarf.dll.

To show all the available cmake options for 'code':

cmake -L /path/to/code

For dwarfexample:

cmake -G Ninja -DBUILD_DWARFEXAMPLE=ON /path/to/code
make

or

cmake -G "Unix Makefiles" -DDO_TESTING=ON /path/to/code
make
# To list the tests
ctest -N
# To run all the tests (their names start with
# the letters 'self').
ctest -R self

To turn off linking with or using zlib or zstd libraries or headers there is an option to cmake as of libdwarf 0.9.1:

cmake -G Ninja -DENABLE_DECOMPRESSION=NO /path/to/code

By default ctest just shows success or failure with no details. To debug a cmake test, for example if test 22 fails and you want to know what the test output is, use the following:

ctest --verbose -I 22

In case one wishes to see the exact compilation/linking options passed at compile time when using -G "Unix Makefiles":

make VERBOSE=1

With -G Ninja the generated build.ninja file shows the build details.