OS | C++ | Python | Java | .NET |
---|---|---|---|---|
amd64 Linux | ||||
arm64 MacOS | ||||
amd64 MacOS | ||||
amd64 Windows |
Dockers:
[AlmaLinux, Alpine, Archlinux, Debian, Fedora, OpenSuse, RockyLinux, Ubuntu]x
[C++, Python, Java, .Net]:
OR-Tools comes with a CMake-based build (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/.
CMake works by generating native Makefiles or build projects that can be used in
the compiler environment of your choice.
You can either build OR-Tools with
CMake as a standalone project or incorporate it into an existing CMake project.
You'll need:
CMake >= 3.18
.- A C++20 compiler (GCC 10 or above)
Here the list of supported solvers:
- CBC
- CLP
- CP-SAT
- CPLEX*
- GLOP
- GLPK*
- HiGHS*
- PDLP
- SCIP
- XPRESS
*: these solvers are disabled by default.
OR-Tools depends on several mandatory librariess, either as infrastructure or as
optimization solvers. You can either compile them all at configure time using
the option -DBUILD_DEPS=ON
(OFF
by default) or compile some of them using
the options below (see CMake Options below).
- zlib (
BUILD_ZLIB
), - bzip2 (
BUILD_BZip2
), - Google Abseil-cpp (
BUILD_absl
), - Google Protobuf (
BUILD_Protobuf
), - COIN-OR solvers:
- 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
),
note: You can disable the support of COIN-OR solvers (i.e. Cbc and Clp solver) by using-DUSE_COINOR=OFF
(ON
by default).
- COIN-OR CoinUtils (
- HIGHS (
BUILD_HIGHS
),
note: You must enable the support of HiGHS solver by using-DUSE_HIGHS=ON
(OFF
by default). - SCIP (
BUILD_SCIP
),
note: You can disable the support of SCIP solver by using-DUSE_SCIP=OFF
(ON
by default).
OR-Tools can also optionally (disabled by default i.e. OFF
) be compiled with
support for the following third-party solvers:
- GLPK (
BUILD_GLPK
),
note: You must enable the support of GLPK solver by using-DUSE_GLPK=ON
(OFF
by default). - CPLEX (
USE_CPLEX
),
warning: Since these solvers are either proprietary (and require a specific license) or available under the GPL, we can't test them on public CI and their support may be broken.
To enable CPLEX support, configure with -DUSE_CPLEX=ON
and
-DCPLEX_ROOT=/absolute/path/to/CPLEX/root/dir
, replacing
/absolute/path/to/CPLEX/root/dir
with the path to your CPLEX installation.
CPLEX_ROOT
can also be defined as an environment variable rather than an
option at configure time.
For ease of migration from legacy make third_party
builds, CMake will also
read the CPLEX installation path from the UNIX_CPLEX_DIR
environment variable,
if defined.
There are several options that can be passed to CMake to modify how the code
is built.
To set these options and parameters, use -D<Parameter_name>=<value>
.
All CMake options are passed at configure time, i.e., by running
cmake -S. -B<your_chosen_build_directory> -DOPTION_ONE=ON -DOPTION_TWO=OFF ...
before running cmake --build <your_chosen_build_directory>
For example, to generate build files including dependencies in a new subdirectory called 'build', run:
cmake -S. -Bbuild -DBUILD_DEPS:BOOL=ON
and then build with:
cmake --build build
Following is a list of available options, for the full list run:
cmake -S. -Bbuild -LH
CMake Option | Default Value | Note |
---|---|---|
CMAKE_BUILD_TYPE |
Release | see CMake documentation here |
BUILD_CXX |
ON | Build C++ |
BUILD_DOTNET |
OFF | Build .Net wrapper and packages |
BUILD_JAVA |
OFF | Build Java wrapper and packages |
BUILD_PYTHON |
OFF | Build Python wrapper and package |
| |
BUILD_FLATZINC
| ON* | Build the flatzinc library
Forced to OFF if BUILD_CXX=OFF
BUILD_GLOP
| OFF* | Build the standalone Glop library
Forced to OFF if BUILD_CXX=ON
, otherwise default to ON
| |
BUILD_DEPS
| OFF* | Default to ON if BUILD_JAVA=ON
or BUILD_PYTHON=ON
or BUILD_DOTNET=ON
BUILD_ZLIB
| OFF* | Build the zlib dynamic library
Forced to ON if BUILD_DEPS=ON
BUILD_BZip2
| OFF* | Build the bzip2 dynamic library
Forced to ON if BUILD_DEPS=ON
BUILD_absl
| OFF* | Build the abseil-cpp dynamic libraries
Forced to ON if BUILD_DEPS=ON
BUILD_Protobuf
| OFF* | Build the protobuf dynamic libraries
Forced to ON if BUILD_DEPS=ON
BUILD_re2
| OFF* | Build the re2 dynamic libraries
Forced to ON if BUILD_DEPS=ON
BUILD_Eigen3
| OFF* | Build the Eigen3 libraries
Forced to ON if BUILD_DEPS=ON
| |
USE_COINOR
| ON* | Enable Coin-OR support
Forced to OFF if BUILD_CXX=OFF
BUILD_CoinUtils
| OFF* | Build the CoinUtils dynamic library
Forced to ON if USE_COINOR=ON
and BUILD_DEPS=ON
BUILD_Osi
| OFF* | Build the Osi dynamic library
Forced to ON if USE_COINOR=ON
and BUILD_DEPS=ON
BUILD_Clp
| OFF* | Build the Clp dynamic library
Forced to ON if USE_COINOR=ON
and BUILD_DEPS=ON
BUILD_Cgl
| OFF* | Build the Cgl dynamic library
Forced to ON if USE_COINOR=ON
and BUILD_DEPS=ON
BUILD_Cbc
| OFF* | Build the Cbc dynamic library
Forced to ON if USE_COINOR=ON
and BUILD_DEPS=ON
| |
USE_GLPK
| OFF* | Enable GLPK support
Forced to OFF if BUILD_CXX=OFF
BUILD_GLPK
| OFF* | Build the GLPK dynamic libraries
Forced to ON if USE_GLPK=ON
and BUILD_DEPS=ON
| |
USE_HIGHS
| ON* | Enable HIGHS support
Forced to OFF if BUILD_CXX=OFF
BUILD_HIGHS
| OFF* | Build the HiGHS dynamic libraries
Forced to ON if USE_HIGHS=ON
and BUILD_DEPS=ON
| |
USE_SCIP
| ON* | Enable SCIP support
Forced to OFF if BUILD_CXX=OFF
BUILD_SCIP
| OFF* | Build the SCIP dynamic libraries
Forced to ON if USE_SCIP=ON
and BUILD_DEPS=ON
| |
USE_CPLEX
| OFF | Enable CPLEX support
| |
BUILD_DOC
| OFF* | Build all documentations
BUILD_CXX_DOC
| OFF* | Build C++ documentation
Forced to ON if BUILD_DOC=ON
BUILD_DOTNET_DOC
| OFF* | Build .Net documentation
Forced to ON if BUILD_DOC=ON
BUILD_JAVA_DOC
| OFF* | Build Java documentation
Forced to ON if BUILD_DOC=ON
BUILD_PYTHON_DOC
| OFF* | Build Python documentation
Forced to ON if BUILD_DOC=ON
INSTALL_DOC
| OFF* | Install all documentations
Forced to OFF if BUILD_CXX=OFF
or BUILD_DOC=OFF
| |
BUILD_SAMPLES
| ON* | Build all samples
Default to ON if BUILD_DEPS=ON
BUILD_CXX_SAMPLES
| ON* | Build all C++ samples
Forced to OFF if BUILD_CXX=OFF
or BUILD_SAMPLE=OFF
BUILD_DOTNET_SAMPLES
| ON* | Build all .Net samples
Forced to OFF if BUILD_DOTNET=OFF
or BUILD_SAMPLE=OFF
BUILD_JAVA_SAMPLES
| ON* | Build all Java samples
Forced to OFF if BUILD_JAVA=OFF
or BUILD_SAMPLE=OFF
BUILD_PYTHON_SAMPLES
| ON* | Build all Python samples
Forced to OFF if BUILD_PYTHON=OFF
or BUILD_SAMPLE=OFF
| |
BUILD_EXAMPLES
| ON* | Build all examples
Default to ON if BUILD_DEPS=ON
BUILD_CXX_EXAMPLES
| ON* | Build all C++ examples
Forced to OFF if BUILD_CXX=OFF
or BUILD_SAMPLE=OFF
BUILD_DOTNET_EXAMPLES
| ON* | Build all .Net examples
Forced to OFF if BUILD_DOTNET=OFF
or BUILD_SAMPLE=OFF
BUILD_JAVA_EXAMPLES
| ON* | Build all Java examples
Forced to OFF if BUILD_JAVA=OFF
or BUILD_SAMPLE=OFF
BUILD_PYTHON_EXAMPLES
| ON* | Build all Python examples
Forced to OFF if BUILD_PYTHON=OFF
or BUILD_SAMPLE=OFF
| |
USE_DOTNET_46
| OFF | Enable .Net Framework 4.6 support
Only available if BUILD_DOTNET=ON
USE_DOTNET_461
| OFF | Enable .Net Framework 4.6.1 support
Only available if BUILD_DOTNET=ON
USE_DOTNET_462
| OFF | Enable .Net Framework 4.6.2 support
Only available if BUILD_DOTNET=ON
USE_DOTNET_48
| OFF | Enable .Net Framework 4.8 support
Only available if BUILD_DOTNET=ON
USE_DOTNET_STD_21
| OFF | Enable .Net Standard 2.1 support
Only available if BUILD_DOTNET=ON
and not targeting arm64 platform
USE_DOTNET_CORE_31
| OFF | Enable .Net Core 3.1 LTS support
Only available if BUILD_DOTNET=ON
and not targeting arm64 platform
USE_DOTNET_6
| OFF | Enable .Net 6 LTS support
Only available if BUILD_DOTNET=ON
USE_DOTNET_7
| OFF | Enable .Net 7 support
Only available if BUILD_DOTNET=ON
USE_DOTNET_8
| ON | Enable .Net 8 LTS support
Only available if BUILD_DOTNET=ON
USE_DOTNET_9
| OFF | Enable .Net 9 support
Only available if BUILD_DOTNET=ON
UNIVERSAL_DOTNET_PACKAGE
| OFF | Build a multi platform package (i.e. Google.OrTools
will depends on all runtime packages)
Only available if BUILD_DOTNET=ON
| |
SKIP_GPG
| ON | Disable GPG sign
Only available if BUILD_JAVA=ON
UNIVERSAL_JAVA_PACKAGE
| OFF | Build a multi platform package (i.e. ortools-java
will depends on all native packages)
Only available if BUILD_JAVA=ON
BUILD_FAT_JAR
| OFF | Build a ortools-java
.jar that includes all of its own Maven dependencies, including the native package
Only available if BUILD_JAVA=ON
| |
BUILD_pybind11
| BUILD_DEPS
| Static build the pybind11 libraries
Forced to ON if BUILD_DEPS=ON
Only available if BUILD_PYTHON=ON
BUILD_pybind11_abseil
| BUILD_DEPS
| Static build the pybind11_abseil libraries
Forced to ON if BUILD_DEPS=ON
Only available if BUILD_PYTHON=ON
BUILD_pybind11_protobuf
| BUILD_DEPS
| Static build the pybind11_protobuf libraries
Forced to ON if BUILD_DEPS=ON
Only available if BUILD_PYTHON=ON
GENERATE_PYTHON_STUB
| ON | Generate python stub files
Only available if BUILD_PYTHON=ON
BUILD_VENV
| BUILD_TESTING
| Create python venv in BINARY_DIR/python/venv
Forced to ON if BUILD_TESTING=ON
Only available if BUILD_PYTHON=ON
VENV_USE_SYSTEM_SITE_PACKAGES
| OFF | Python venv can use system site package (e.g. py3-numpy
on Alpine)
Only available if BUILD_PYTHON=ON
and BUILD_VENV=ON
FETCH_PYTHON_DEPS
| BUILD_DEPS
| Fetch python modules needed to build ortools package
Only available if BUILD_PYTHON=ON
| |
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
).
If you already have OR-Tools installed in your system, you can use the CMake
command
find_package()
to include OR-Tools in your C++ CMake Project.
note: You may need to set
CMAKE_PREFIX_PATH
in order for CMake to find your OR-Tools installation.
cmake_minimum_required(VERSION 3.14)
project(myproj VERSION 1.0)
find_package(ortools CONFIG REQUIRED)
add_executable(myapp main.cpp)
target_link_libraries(myapp ortools::ortools)
Include directories, compile definitions and compile options will be added automatically to your target as needed.
The recommendations below are similar to those for using CMake within the googletest framework
Thus, you can use the CMake command
add_subdirectory()
to include OR-Tools directly from a subdirectory of your C++ CMake project.
Note: The ortools::ortools target is in this case an ALIAS library target
for the ortools library target.
cmake_minimum_required(VERSION 3.18)
project(myproj VERSION 1.0)
add_subdirectory(or-tools)
add_executable(myapp main.cpp)
target_link_libraries(myapp ortools::ortools)
Again, include directories, compile definitions and compile options will be added automatically to your target as needed.
If you have CMake >= 3.18
you can use the built-in module
FetchContent
instead. Note: The ortools::ortools target is in this case an ALIAS library
target for the ortools library target.
cmake_minimum_required(VERSION 3.18)
project(myproj VERSION 1.0 LANGUAGES CXX)
include(FetchContent)
FetchContent_Declare(
or-tools
GIT_REPOSITORY https://github.com/google/or-tools.git
GIT_TAG main
)
# 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 the OR-Tools
dependencies as well.