1
0
mirror of https://github.com/libssh2/libssh2.git synced 2026-10-24 03:48:58 +03:00
Files
libssh2/docs/INSTALL-CMAKE.md
Viktor Szakats 9a0b40af73 tidy-up: version-related comments and messages
If it improves consistency across builds and sources, prefer 'greater'
or newer/later/+, prefer no 'v'/'version` prefix.

Closes #1866
2026-08-27 03:25:32 +02:00

171 lines
4.6 KiB
Markdown

<!--
Copyright (C) The libssh2 project and its contributors.
SPDX-License-Identifier: BSD-3-Clause
-->
License: see `COPYING`
Source code: <https://github.com/libssh2/libssh2>
Web site source code: <https://github.com/libssh2/www>
# Installation instructions with CMake
To build libssh2 you need [CMake 3.18 or greater](https://cmake.org/download/)
and one of the following cryptography libraries:
* Libgcrypt
* mbedTLS
* OpenSSL
* WinCNG
* wolfSSL
## Getting started
If you are happy with the default options, make a new build directory, change
to it, configure the build environment and build the project:
```
cmake -B bld
cmake --build bld
```
libssh2 is built as a static library and uses any cryptography library
available. The library binary is put in `bld/src`, with the
examples in `bld/example` and the tests in `bld/tests`.
## Customising the build
You might want to customise the build options. You can pass the options
to CMake on the command line:
```
cmake -D<option>=<value> ..
```
The following options are available:
* `LINT=ON`
Enables running the source code linter when building.
Can be `ON` or `OFF`. Default: `OFF`
* `BUILD_STATIC_LIBS=OFF`
Determines whether to build a libssh2 static library.
Can be `ON` or `OFF`. Default: `ON`
* `BUILD_SHARED_LIBS=OFF`
Determines whether to build a libssh2 shared library (`.dll`/`.so`).
Can be `ON` or `OFF`. Default: `ON`
* `CRYPTO_BACKEND=`
Chooses a specific cryptography library to use for cryptographic operations.
Can be [`OpenSSL`](https://www.openssl-library.org/),
[`Libgcrypt`](https://www.gnupg.org/), `WinCNG` (Windows Vista+),
[`mbedTLS`](https://www.trustedfirmware.org/projects/mbed-tls/) or blank
to use any library available.
CMake attempts to locate the libraries automatically. For more
information, visit:
<https://cmake.org/cmake/help/v3.18/manual/cmake-packages.7.html>
* `ENABLE_ZLIB_COMPRESSION=ON`
Use [zlib](https://zlib.net/) for payload compression.
Can be `ON` or `OFF`. Default: `OFF`
* `ENABLE_DEBUG_LOGGING=ON`
Enable the libssh2_trace() function for showing debug traces.
Can be `ON` or `OFF`. Default: `OFF` in Release, `ON` in `Debug`
## Using AWS-LC or BoringSSL
You can also build against [AWS-LC](https://github.com/aws/aws-lc) or
[BoringSSL](https://github.com/google/boringssl). Specify
`CRYPTO_BACKEND=OpenSSL`, then indicate the installation directory of
the cryptography library using `OPENSSL_ROOT_DIR=`
## Build tools
The previous examples used CMake to start the build using:
```
cmake --build .
```
Alternatively, once CMake has configured your project, you can use your own
build tool, e.g GNU make, Visual Studio, etc., from that point onwards.
## Tests
To test the build, run the appropriate test target for your build system. For
example:
```
cmake --build . --target test
```
or
```
cmake --build . --target RUN_TESTS
```
## How do I use libssh2 in my project if my project does not use CMake?
If you are not using CMake for your own project, install libssh2
```
cmake <libssh2 source location>
cmake --build .
cmake --build . --target install
```
or
```
cmake --build . --target INSTALL
```
and then specify the install location to your project in the normal way for
your build environment. If you do not like the default install location, add
`-DCMAKE_INSTALL_PREFIX=<chosen prefix>` when initially configuring the
project.
## How can I use libssh2 in my project if it also uses CMake?
If your own project also uses CMake, you do not need to worry about setting it
up with libssh2's location. Add the following lines and CMake finds
libssh2 on your system, set up the necessary paths and link the library with
your binary.
```cmake
find_package(libssh2 REQUIRED CONFIG)
target_link_libraries(my_project_target libssh2::libssh2)
```
You still have to make libssh2 available on your system first. You can install
it in the traditional way shown above, but you do not have to. Instead you can
build it, which exports its location to the user
[package registry](https://cmake.org/cmake/help/v3.18/manual/cmake-packages.7.html#package-registry)
where `find_package` finds it.
You can even combine the two steps using a so-called
['superbuild' project](https://www.kitware.com/main/wp-content/uploads/2016/01/kitware_quarterly1009.pdf)
that downloads, builds and exports libssh2, and then builds your project:
```cmake
include(ExternalProject)
ExternalProject_Add(
libssh2
URL <libssh2 download location>
URL_HASH SHA256=<libssh2 archive SHA256>
INSTALL_COMMAND "")
ExternalProject_Add(
MyProject DEPENDS libssh2
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src
INSTALL_COMMAND "")
```