7.8 KiB
OR-Tools CMake Build Instructions
| OS | C++ | Python | Java | .NET |
|---|---|---|---|---|
| Linux | ||||
| macOS | ||||
| Windows |
Introduction
| Dependencies | 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.
warning: Currently OR-Tools CMake doesn't support Java nor .Net, please use the Makefile based build instead.
Dependencies
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.
Integrating OR-Tools in your CMake Project
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
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.
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)
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.
Using FetchContent
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.