OS | C++ | Python | Java | .NET |
---|---|---|---|---|
Linux | ||||
MacOS | ||||
Windows |
Dockers [Alpine, Archlinux, Centos, Debian, Fedora, OpenSuse, Ubuntu]x[C++, Python, Java, .Net]:
| Dependencies | Options | C++ | Swig | Python 3 | .Net Core | Java | Integration | CI |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 it can be incorporated into an existing 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.
-
ZLIB (
BUILD_ZLIB
), -
Google Abseil-cpp (
BUILD_absl
), -
Google Protobuf (
BUILD_Protobuf
), -
SCIP (
BUILD_SCIP
),
note: You can disable the support of SCIP solvers by using-DUSE_SCIP=OFF
(ON
by default). -
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 (
OR-Tools also have few (ed compile time) optional solvers support (disabled by default):
- CPLEX (
USE_CPLEX
), - XPRESS (
USE_XPRESS
)
warning: Since these solvers require license and are proprietary, we can't test it on public CI and support can be broken.
There are several options that can be passed to CMake to modify how the code is built.
For all of these options and parameters you have to use -D<Parameter_name>=<value>
.
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 |
---|---|---|
BUILD_DEPS |
OFF* | Default to ON if BUILD_JAVA=ON or BUILD_PYTHON=ON or BUILD_DOTNET=ON |
BUILD_ZLIB |
OFF* | Static build the zlib library Forced to ON if BUILD_JAVA=ON or BUILD_PYTHON=ON or BUILD_DOTNET=ON |
BUILD_absl |
OFF* | Static build the abseil-cpp libraries Forced to ON if BUILD_JAVA=ON or BUILD_PYTHON=ON or BUILD_DOTNET=ON |
BUILD_Protobuf |
OFF* | Static build the protobuf libraries Forced to ON if BUILD_JAVA=ON or BUILD_PYTHON=ON or BUILD_DOTNET=ON |
USE_SCIP |
ON* | Enable SCIP support Forced to OFF if BUILD_CXX=OFF |
BUILD_SCIP |
OFF* | Static build the SCIP libraries Forced to ON if USE_SCIP=ON and BUILD_DEPS=ON |
USE_COINOR |
ON* | Enable Coin-OR support Forced to OFF if BUILD_CXX=OFF |
BUILD_CoinUtils |
OFF* | Static build the CoinUtils library Forced to ON if USE_COINOR=ON and BUILD_DEPS=ON |
BUILD_Osi |
OFF* | Static build the Osi library Forced to ON if USE_COINOR=ON and BUILD_DEPS=ON |
BUILD_Clp |
OFF* | Static build the Clp library Forced to ON if USE_COINOR=ON and BUILD_DEPS=ON |
BUILD_Cgl |
OFF* | Static build the Cgl library Forced to ON if USE_COINOR=ON and BUILD_DEPS=ON |
BUILD_Cbc |
OFF* | Static build the Cbc library Forced to ON if USE_COINOR=ON and BUILD_DEPS=ON |
USE_CPLEX |
OFF | Enable CPLEX support |
USE_XPRESS |
OFF | Enable XPRESS support |
CMAKE_BUILD_TYPE |
Release | see CMake documentation here |
BUILD_CXX |
ON | Build C++ |
BUILD_PYTHON |
OFF | Build Python wrapper and package |
BUILD_JAVA |
OFF | Build Java wrapper and packages |
BUILD_DOTNET |
OFF | Build .Net wrapper and packages |
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_SAMPLES |
OFF* | 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_PYTHON_SAMPLES |
ON* | Build all Python samples Forced to OFF if BUILD_PYTHON=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_DOTNET_SAMPLES |
ON* | Build all .Net samples Forced to OFF if BUILD_DOTNET=OFF or BUILD_SAMPLE=OFF |
BUILD_EXAMPLES |
OFF* | 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_PYTHON_EXAMPLES |
ON* | Build all Python examples Forced to OFF if BUILD_PYTHON=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_DOTNET_EXAMPLES |
ON* | Build all .Net examples Forced to OFF if BUILD_DOTNET=OFF or BUILD_SAMPLE=OFF |
SKIP_GPG |
OFF | 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 |
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 (https://github.com/google/googletest/blob/master/googletest/README.md#incorporating-into-an-existing-cmake-project)
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.14)
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.14.7
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.14)
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.