Update cmake/README.md
This commit is contained in:
110
cmake/README.md
110
cmake/README.md
@@ -34,7 +34,17 @@
|
||||
[dotnet_win_svg]: https://github.com/google/or-tools/workflows/.Net%20Windows%20CI/badge.svg
|
||||
[dotnet_win_link]: https://github.com/google/or-tools/actions?query=workflow%3A".Net+Windows+CI"
|
||||
|
||||
OR-Tools comes with a CMake build script ([CMakeLists.txt](../CMakeLists.txt))
|
||||
# Introduction
|
||||
<nav for="cmake"> |
|
||||
<a href="#deps">Dependencies</a> |
|
||||
<a href="#build_cpp">C++</a> |
|
||||
<a href="#build_python">Python</a> |
|
||||
<a href="#build_dotnet">.Net</a> |
|
||||
<a href="#build_java">Java</a> |
|
||||
<a href="#integration">Integration</a> |
|
||||
</nav>
|
||||
|
||||
OR-Tools comes with a CMake based build ([CMakeLists.txt](../CMakeLists.txt))
|
||||
that can be used on a wide range of platforms (the "C" stands for
|
||||
cross-platform). If you don't have CMake installed already, you can download it
|
||||
for free from <http://www.cmake.org/>.
|
||||
@@ -44,19 +54,37 @@ the compiler environment of your choice.<br>You can either build OR-Tools with
|
||||
CMake as a standalone project or it can be incorporated into an existing CMake
|
||||
project.
|
||||
|
||||
**warning: Currently OR-Tools CMake doesn't support Java nor C#.**
|
||||
**warning: Currently OR-Tools CMake doesn't support Java nor .Net, please use
|
||||
the Makefile based build instead.**
|
||||
|
||||
## Table of Contents
|
||||
# [Dependencies](#deps)
|
||||
|
||||
* [Building OR-Tools with CMake](#building-or-tools-with-cmake)
|
||||
* [Consuming OR-Tools in a CMake Project](#consuming-or-tools-in-a-cmake-project)
|
||||
* [Incorporating OR-Tools into a CMake Project](#incorporating-or-tools-into-a-cmake-project)
|
||||
OR-Tools depends on severals mandatory libraries. You can compile them all at
|
||||
configure time using the option `-DBUILD_DEPS=ON` (`OFF` by default) or you can
|
||||
compile few of them using the options below.
|
||||
|
||||
For API/ABI compatibility reasons, if you will be using OR-Tools inside a larger
|
||||
C++ project, we recommend using CMake and incorporate OR-Tools as a CMake
|
||||
subproject (i.e. using `add_sudirectory()`).
|
||||
* ZLIB (`BUILD_ZLIB`),
|
||||
* Google Abseil-cpp (`BUILD_absl`),
|
||||
* Google Gflags (`BUILD_gflags`),
|
||||
* Google Glog (`BUILD_glog`),
|
||||
* Google Protobuf (`BUILD_Protobuf`),
|
||||
* COIN-OR CoinUtils (`BUILD_CoinUtils`),
|
||||
* COIN-OR Osi (`BUILD_Osi`),
|
||||
* COIN-OR Clp (`BUILD_Clp`),
|
||||
* COIN-OR Cgl (`BUILD_Cgl`),
|
||||
* COIN-OR Cbc (`BUILD_Cbc`),
|
||||
|
||||
## Building OR-Tools with CMake
|
||||
note: You can disable the support of COIN-OR solvers (i.e. Cbc and Clp solver) by using `-DUSE_COINOR=OFF`.
|
||||
|
||||
OR-Tools also have few (ed compile time) optional solvers support (disabled by default):
|
||||
* SCIP (`USE_SCIP`),
|
||||
* CPLEX (`USE_CPLEX`),
|
||||
* XPRESS (`USE_XPRESS`)
|
||||
|
||||
**warning: Since these solvers require license and are proprietary, so we can't test it on public CI and
|
||||
support can be broken.**
|
||||
|
||||
# [Building OR-Tools C++ with CMake](#build_cpp)
|
||||
|
||||
When building OR-Tools as a standalone project on Unix-like systems with GNU
|
||||
Make, the typical workflow is:
|
||||
@@ -69,13 +97,13 @@ cd or-tools
|
||||
|
||||
2. Run CMake to configure the build tree.
|
||||
```sh
|
||||
cmake -H. -Bbuild -G "Unix Makefiles"
|
||||
cmake -S. -Bbuild -G "Unix Makefiles" -DBUILD_DEPS=ON
|
||||
```
|
||||
note: To get the list of available generators (e.g. Visual Studio), use `-G ""`
|
||||
|
||||
3. Afterwards, generated files can be used to compile the project.
|
||||
```sh
|
||||
cmake --build build
|
||||
cmake --build build -v
|
||||
```
|
||||
|
||||
4. Test the build software (optional).
|
||||
@@ -88,13 +116,36 @@ cmake --build build --target test
|
||||
cmake --build build --target install
|
||||
```
|
||||
|
||||
# [Building OR-Tools with Python support](#build_python)
|
||||
|
||||
TODO
|
||||
|
||||
# [Building OR-Tools with .Net support](#build_dotnet)
|
||||
|
||||
TODO
|
||||
|
||||
# [Building OR-Tools with Java support](#build_java)
|
||||
|
||||
TODO
|
||||
|
||||
# [Integrating OR-Tools in your CMake Project](#integration)
|
||||
|
||||
You should be able to integrate OR-Tools in your C++ CMake project following one
|
||||
of these methods.
|
||||
|
||||
For API/ABI compatibility reasons, if you will be using OR-Tools inside a larger
|
||||
C++ project, we recommend using CMake and incorporate OR-Tools as a CMake
|
||||
subproject (i.e. using `add_sudirectory()` or `FetchContent`).
|
||||
|
||||
## Consuming OR-Tools in a CMake Project
|
||||
|
||||
If you already have OR-Tools installed in your system, you can use the CMake
|
||||
command
|
||||
If you already have OR-Tools installed in your system, you can use the CMake command
|
||||
[`find_package()`](https://cmake.org/cmake/help/latest/command/find_package.html)
|
||||
to include OR-Tools in your C++ CMake Project.
|
||||
|
||||
note: You may need to set [`CMAKE_PREFIX_PATH`](https://cmake.org/cmake/help/latest/command/find_package.html#search-procedure)
|
||||
in order for CMake to find your OR-Tools installation.
|
||||
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.0.2)
|
||||
project(myproj VERSION 1.0)
|
||||
@@ -108,8 +159,8 @@ target_link_libraries(myapp ortools::ortools)
|
||||
Include directories, compile definitions and compile options will be added
|
||||
automatically to your target as needed.
|
||||
|
||||
## Incorporating OR-Tools into a CMake Project
|
||||
|
||||
## Incorporating OR-Tools into a CMake Super Project
|
||||
### Using add_subdirectory
|
||||
The recommendations below are similar to those for using CMake within the
|
||||
googletest framework
|
||||
(<https://github.com/google/googletest/blob/master/googletest/README.md#incorporating-into-an-existing-cmake-project>)
|
||||
@@ -132,3 +183,30 @@ target_link_libraries(myapp ortools::ortools)
|
||||
|
||||
Again, include directories, compile definitions and compile options will be
|
||||
added automatically to your target as needed.
|
||||
|
||||
### Using FetchContent
|
||||
If you have `CMake >= 3.11.4` you can use the built-in module [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.html) instead.
|
||||
Note: The **ortools::ortools** target is in this case an ALIAS library target
|
||||
for the **ortools** library target.
|
||||
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.11.4)
|
||||
project(myproj VERSION 1.0 LANGUAGES CXX)
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
or-tools
|
||||
GIT_REPOSITORY https://github.com/google/or-tools.git
|
||||
GIT_TAG master
|
||||
)
|
||||
|
||||
# After the following call, the CMake targets defined by or-tools
|
||||
# will be defined and available to the rest of the build
|
||||
FetchContent_MakeAvailable(or-tools)
|
||||
|
||||
add_executable(myapp main.cpp)
|
||||
target_link_libraries(myapp ortools::ortools)
|
||||
```
|
||||
|
||||
note: You may need to use the option `-DBUILD_DEPS=ON` to get all or-tools
|
||||
dependencies as well.
|
||||
|
||||
Reference in New Issue
Block a user