GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — or-tools/cmake at stable · google/or-tools

Expand file tree

/

cmake

/
Copy path

Directory actions

More options

More options

Directory actions

More options

More options

Latest commit

 

History

History
History
/

cmake

/
Copy path

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
dependencies
dependencies
 
 
docker
docker
 
 
docs
docs
 
 
samples
samples
 
 
vagrant
vagrant
 
 
FindCPLEX.cmake
FindCPLEX.cmake
 
 
FindCbc.cmake
FindCbc.cmake
 
 
FindCgl.cmake
FindCgl.cmake
 
 
FindClp.cmake
FindClp.cmake
 
 
FindCoinUtils.cmake
FindCoinUtils.cmake
 
 
FindEigen3.cmake
FindEigen3.cmake
 
 
FindGLPK.cmake
FindGLPK.cmake
 
 
FindJulia.cmake
FindJulia.cmake
 
 
FindOsi.cmake
FindOsi.cmake
 
 
FindSCIP.cmake
FindSCIP.cmake
 
 
Findre2.cmake
Findre2.cmake
 
 
Makefile
Makefile
 
 
README.md
README.md
 
 
ccache.cmake
ccache.cmake
 
 
check_deps.cmake
check_deps.cmake
 
 
cpp.cmake
cpp.cmake
 
 
dotnet.cmake
dotnet.cmake
 
 
flatzinc.cmake
flatzinc.cmake
 
 
glop.cmake
glop.cmake
 
 
glopConfig.cmake.in
glopConfig.cmake.in
 
 
host.CMakeLists.txt
host.CMakeLists.txt
 
 
host.cmake
host.cmake
 
 
java.cmake
java.cmake
 
 
ortoolsConfig.cmake.in
ortoolsConfig.cmake.in
 
 
python-install.cmake.in
python-install.cmake.in
 
 
python.cmake
python.cmake
 
 
system_deps.cmake
system_deps.cmake
 
 
utils.cmake
utils.cmake
 
 

README.md

Outline

OR-Tools CMake Build Instructions

OS C++ Python Java .NET
amd64 Linux Status Status Status Status
arm64 MacOS Status Status Status Status
amd64 MacOS Status Status Status Status
amd64 Windows Status Status Status Status

Dockers: [AlmaLinux, Alpine, Archlinux, Debian, Fedora, OpenSuse, RockyLinux, Ubuntu]x [C++, Python, Java, .Net]: Status

Introduction

| Requirement | 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 incorporate it into an existing CMake project.

Requirement

You'll need:

  • CMake >= 3.24.
  • A C++20 compiler (GCC 10 or above)

Solvers supported

Here the list of supported solvers:

  • CBC
  • CLP
  • CP-SAT
  • CPLEX*
  • GLOP
  • GLPK*
  • HiGHS*
  • PDLP
  • SCIP
  • XPRESS

*: these solvers are disabled by default.

Dependencies

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).
  • 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.

Enabling CPLEX Support

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.

CMake Options

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
Dependencies
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
Coin-OR
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
GLPK
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
HiGHS
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
SCIP
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
CPLEX
USE_CPLEX OFF Enable CPLEX support
Documentation
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
Samples
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
Examples
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
.Net
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
Java
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
Python
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

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.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.

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

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.

Using FetchContent

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.

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.