OS | C++ | Python | Java | .NET |
---|---|---|---|---|
Linux | ||||
macOS | ||||
Windows |
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 https://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.
warning: Currently OR-Tools CMake doesn't support Java nor .Net, please use the Makefile based build instead.
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 Gflags (
BUILD_gflags
), - Google Glog (
BUILD_glog
), - Google Protobuf (
BUILD_Protobuf
), - SCIP (
BUILD_SCIP
), - 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
.
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.
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.0.2)
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.0.2)
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.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.