Prev Next

@(@\newcommand{\W}[1]{ \; #1 \; } \newcommand{\R}[1]{ {\rm #1} } \newcommand{\B}[1]{ {\bf #1} } \newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} } \newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} } \newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} } \newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }@)@
Using CMake to Configure CppAD

The CMake Program
The cmake program enables one to create a single set of scripts, called CMakeLists.txt, that can be used to test and install a program on Unix, Microsoft, or Apple operating systems. For example, one can use it to automatically generate Microsoft project files.

Build Directory
Create build, a subdirectory of the distribution directory , change into the build.

CMake Command

Simple
The simplest version of the cmake command is
    cmake ..
This assumes that you are starting in the build directory (so that .. refers to the distribution directory). The command also assumes that cmake is in your execution path with version greater than or equal 2.8. If not, you can put the path to the version of cmake in font the command. It is suggested that you should start with the simple version of the cmake command above and then add options one at a time.

Warning
Version 3.10.2 of cmake will generates the following warning if boost is not present your system:
CMake Warning at /usr/share/cmake-3.10/Modules/FindBoost.cmake:567 (message):
  Imported targets and dependency information not available for Boost version
  (all versions older than 1.33)
  
...
This is not a problem because CppAD will automatically exclude the examples and tests that use boost. Newer version of cmake; e.g., 3.13.4, do not generate this warning (when boost is not present on your system).

Options
The full version of the command, with all its optional arguments is:
cmake 
                                                                     \
    -D CMAKE_VERBOSE_MAKEFILE=
cmake_verbose_makefile                       \
    -G 
generator                                                           \
    \
    -D cppad_prefix=
cppad_prefix                                           \
    -D cppad_postfix=
cppad_postfix                                         \
    \
    -D cmake_install_includedirs=
cmake_install_includedirs                 \
    -D cmake_install_libdirs=
cmake_install_libdirs                         \
    \
    -D cmake_install_datadir=
cmake_install_datadir                         \
    -D cmake_install_docdir=
cmake_install_docdir                           \
    \
    -D include_adolc=true                                                    \
    -D include_eigen=true                                                    \
    -D include_ipopt=true                                                    \
    -D include_cppadcg=true
    \
    -D colpack_prefix=
colpack_prefix                                       \
    -D fadbad_prefix=
fadbad_prefix                                         \
    -D sacado_prefix=
sacado_prefix                                         \
    \
    -D cppad_cxx_flags=
cppad_cxx_flags                                     \
    -D cppad_profile_flag=
cppad_profile_flag                               \
    -D cppad_testvector=
cppad_testvector                                   \
    -D cppad_max_num_threads=
cppad_max_num_threads                         \
    -D cppad_tape_id_type=
cppad_tape_id_type                               \
    -D cppad_tape_addr_type=
cppad_tape_addr_type                           \
    -D cppad_debug_which=
cppad_debug_which                                 \
    \
    ..

msys2
The msys2 system, with mingw-64 and g++, has some requires some special procedures. The following seems to work: Use pacman to install make, gcc, and mingw-w64-x86_64-cmake. Then use the following replacement for the simple cmake and test command:
    cmake \
        -G 'Unix Makefiles' \
        -D CMAKE_C_COMPILER=gcc \
        -D CMAKE_CXX_COMPILER=g++ \
        ..
    make check

Visual Studio
  1. Launch the Visual Studio developer command prompt
  2. Use the command
     
        where cmake.exe
    
    to see if cmake.exe comes with your version of Visual Studio. If not, download and install the win64-x64 version of cmake . Make sure you select the box that adds cmake to your execution path.
  3. In the command window, change into the directory where the cppad git repository is located and run the following commands.
     
        rmdir /S /Q build
        mkdir build
        cd build
        cmake -G "NMake Makefiles" -D cppad_debug_which="debug_all" ..
        nmake check
    

autotools
The autotools build with the Visual Studio compiler should work with the following configure and test commands
 
    mkdir build
    cd build
    ../configure CC=cl CXX=cl CXX_FLAGS="-DEBUG"
    make test
An optimized versions was tested using
 
    ../configure CXX=cl CC=cl CXX_FLAGS="-DNDEBUG -O2 -EHsc"
    make test
The commands above need to be run a Dos window, that has the vcvarsall.bat settings, extend path that includes the msys2 bin directory, and was running the bash shell inside the Doc window. It is highly recommended that you use the cmake commands above, an not ../configure, when building with Visual Studio.

make check
Important information about the CppAD configuration is output by this command. If you have the grep program, and store the output in cmake.log, you can get a list of all the test options with the command:
 
    grep 'make check' cmake.log

cmake_verbose_makefile
This value should be either YES or NO. The default value, when it is not present, is NO. If it is YES, then the output of the make commands will include all of the files and flags used to run the compiler and linker. This can be useful for seeing how to compile and link your own applications.

generator
The CMake program is capable of generating different kinds of files. Below is a table with a few of the possible files
generator Description
"Unix Makefiles" make files for unix operating system
"NMake Makefiles" make files for Visual Studio
Other generator choices are available; see the cmake generators documentation.

cppad_prefix
This is the top level absolute path below which all of the CppAD files are installed by the command
    make install
For example, if cppad_prefix is /usr, cmake_install_includedirs is include, and cppad_postfix is not specified, the file cppad.hpp is installed in the location
    /usr/include/cppad/cppad.hpp
The default value for cppad_prefix is the value of CMAKE_INSTALL_PREFIX ; see the cmake documentation. (Before 2019-10-02 the default value was /usr; see the heading 10-02 on whats_new_19 .)

cppad_postfix
This is the bottom level relative path below which all of the CppAD files are installed. For example, if cppad_prefix is /usr, cmake_install_includedirs is include, and cppad_postfix is coin, the file cppad.hpp is installed in the location
    /usr/include/coin-or/cppad/cppad.hpp
The default value for cppad_postfix is empty; i.e, there is no bottom level relative directory for the installed files.

cmake_install_includedirs
This is one directory, or a list of directories separated by spaces or by semi-colons. This first entry in the list is the middle level relative path below which the CppAD include files are installed. The entire list is used for searching for include files. For example, if cppad_prefix is /usr, cmake_install_includedirs is include, and cppad_postfix is not specified, the file cppad.hpp is installed in the location
    /usr/include/cppad/cppad.hpp
The default value for this directory list is include.

cmake_install_libdirs
This is one directory, or a list of directories separated by spaces or by semi-colons. This first entry in the list is the middle level relative path below which the CppAD library files are installed. The entire list is used for searching for library files. The default value for this directory list is lib.

cppad_lib
As an example of where the CppAD library is installed, if cppad_prefix is /usr, cmake_install_libdirs is lib, cppad_postfix is not specified, the CppAD library is installed in
    /usr/lib/libcppad_lib.
ext.major.release
Here major is the major library version number, release is the release number for this version, and ext is the extension for shared libraries on this system. If yyyymmdd is the CppAD version number, the major CppAD library version number is
    
major = dd - 1 + 31 * ( mm - 1 + 12 * ( yyyy - 2019) )
If there is no release for this version of CppAD, the CppAD library is installed in
    /usr/lib/libcppad_lib.
ext.major
The Mac is special, ext is dylib and comes at the end of the file name for that system.

cmake_install_datadir
This is the middle level relative path below which the CppAD data files are installed. For example, if cppad_prefix is /usr, cmake_install_datadir is share, and cppad_postfix is not specified, the pkgconfig file cppad.pc is installed in the location
    /usr/share/pkgconfig/cppad.pc
The default value for cmake_install_datadir is share.

cmake_install_docdir
This is the middle level relative path below which the CppAD documentation files are installed. For example, if cppad_prefix is /usr, cmake_install_docdir is share/doc, and cppad_postfix is not specified, the file cppad.xml is installed in the location
    /usr/share/doc/cppad/cppad.xml
There is no default value for cmake_install_docdir . If it is not specified, the documentation files are not installed.

include_adolc
The adolc examples will be compiled and tested if include_adolc=true is in the command line.

include_eigen
The eigen examples will be compiled and tested if include_eigen=true is on the command line.

include_ipopt
The ipopt examples will be compiled and tested if include_ipopt=true is on the command line.

include_cppadcg
The cppadcg examples will be compiled and tested if include_ipopt=true is on the command line. Warning : Do not use this option when installing cppad because the cppadcg package depends on cppad and using this option makes cppad depend on cppadcg. The script get_cppadcg.sh handles this confusion for testing purposes only.

package_prefix
Each of these packages do not have pkg-config files and correspond to optional CppAD examples. If a prefixes listed below is on the command line, the corresponding examples will be compiled and run:
colpack_prefix Enabling Colpack Sparsity Calculations
fadbad_prefix Including Fadbad Speed Tests
sacado_prefix Including Sacado Speed Tests

cppad_cxx_flags
This specifies the addition compiler flags that are used when compiling the CppAD examples and tests. The default value for these flags is the empty string "". These flags must be valid for the C++ compiler on your system. For example, if you are using g++ you could specify
 
    -D cppad_cxx_flags="-Wall -ansi -pedantic-errors -std=c++11 -Wshadow"

C++11
In order for the compiler to take advantage of features that are new in C++11, the cppad_cxx_flags must enable these features. The compiler may still be used with a flag that disables the new features (unless it is a Microsoft compiler; i.e., _MSC_VER is defined).

debug and release
The CppAD examples and tests decide which files to compile for debugging and which to compile for release. Hence debug and release flags should not be included in cppad_cxx_flags . See also the CPPAD_DEBUG_AND_RELEASE compiler flag (which should not be included in cppad_cxx_flags ).

cppad_profile_flag
This specifies an addition compiler and link flag that is used for profiling the speed tests. A profile version of the speed test is only build when this argument is present. If this flag is specified, you can run the gnu profiler with the following command:
    cd build/speed/profile
    make check_speed_profile
    ./speed_profile 
test seed option_list
    gprof -b speed_profile | sed -f gprof.sed

cppad_testvector
See Choosing the CppAD Test Vector Template Class.

cppad_max_num_threads
The value cppad_max_num_threads must be greater than or equal to four; i.e., max_num_threads >= 4 . The current default value for cppad_max_num_threads is 48, but it may change in future versions of CppAD. The value cppad_max_num_threads in turn specifies the default value for the preprocessor symbol CPPAD_MAX_NUM_THREADS .

cppad_tape_id_type
The type cppad_tape_id_type is used for identifying different tapes. The valid values for this type are unsigned char, unsigned short int, unsigned int, and size_t. The smaller the value of sizeof(cppad_tape_id_type) , the less memory is used. On the other hand, the value
    std::numeric_limits<
cppad_tape_id_type>::max()
must be larger than the maximum number of tapes used by one thread times CPPAD_MAX_NUM_THREADS .

cstdint
If all of the following cstdint types are defined, they can also be used as the value of cppad_tape_addr_type : uint8_t, uint16_t, uint32_t, uint64_t.

cppad_tape_addr_type
The type cppad_tape_addr_type is used for address in the AD recordings (tapes). The valid values for this argument are unsigned char, unsigned short int, unsigned int, size_t. The smaller the value of sizeof(cppad_tape_addr_type) , the less memory is used. On the other hand, the value
    std::numeric_limits<
cppad_tape_addr_type>::max()
must be larger than any of the following: size_op , size_op_arg , size_par , size_text , size_VecAD .

cstdint
If all of the following cstdint types are defined, they can also be used as the value of cppad_tape_addr_type : uint8_t, uint16_t, uint32_t, uint64_t.

cppad_debug_which
All of the CppAD examples and test can optionally be tested in debug or release mode (see exception below). This option controls which mode is chosen for the corresponding files. The value cppad_debug_which be one of the following: debug_even, debug_odd, debug_all, debug_none. If it is debug_even (debug_odd), files with an even (old) index in a list for each case will be compiled in debug mode. The remaining files will be compiled in release mode. If it is debug_all (debug_none), all the files will be compiled in debug (release) mode. If cppad_debug_which does not appear on the command line, the default value debug_all is used.
Input File: omh/install/cmake.omh