\(\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}} }\)
cmake¶
View page sourceUsing 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; see
cmake resources .
Build Directory¶
Create build
, a subdirectory of the
Distribution Directory ,
change into the build
.
Eigen¶
The cmake command will automatically search for the eigen package. If it is found, the corresponding examples will be tested and the sparse2eigen utility will be installed; see eigen . The results of cppad’s search for Eigen are reported in the output of the cmake command.
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).
true_or_false¶
The syntax -D
name = true_or_false , mean that
the variable name can be assigned the value true
or false
.
Options¶
The full version of the command, with all its optional arguments is:
cmake
\-D CMAKE_VERBOSE_MAKEFILE
= cmake_verbose_makefile \-D CMAKE_BUILD_TYPE
= cmake_build_type \-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_doc
= true_or_false \-D cmake_defined_ok
= true_or_false \-D cppad_static_lib
= true_or_false \-D cppad_debug_and_release
= true_or_false \-D include_adolc
= true_or_false \-D include_ipopt
= true_or_false \-D include_cppadcg
= true_or_false \-D colpack_prefix
= colpack_prefix \-D fadbad_prefix
= fadbad_prefix \-D sacado_prefix
= sacado_prefix \-D cppad_cxx_flags
= cppad_cxx_flags \-D cppad_link_flags
= cppad_link_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++
,
the following seems to work:
Use pacman
to install
make
, gcc
, and mingw-w64-x86_64-cmake
.
Visual Studio¶
Make sure you have a version of git for windows .
Launch the Visual Studio developer command window
At the command prompt enter
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 the cmake program. Make sure you select the box that addscmake
to your execution path.Download the CppAD repository, and make it the current directory, using the following commands
clone https://github.com/coin-or/CppAD.git cppad.git cd cppad.git
Execute the following commands:
if exist build ( rmdir /S build )
mkdir build
cd build
cmake ^
-G "NMake Makefiles"^
-D cppad_cxx_flags="/MP /EHs /EHc /std:c++17 /Zc:__cplusplus"^
-D cppad_static_lib=TRUE^
..
nmake check
Note that when using windows DLL’s, CppAD builds a static version
of cppad_lib
. There are problems using a DLL for cppad_lib
because Windows makes separate copies of static class member functions,
one for library and one for the rest of the program.
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 true
or false
.
The default value, when it is not present, is false
.
If it is true
, 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.
cmake_build_type¶
This value should be one of the valid CMake build types; e.g.,
Debug
,
Release
,
RelWithDebInfo
,
MinSizeRel
.
The value of this option is not case sensitive; e.g.,
Debug
and debug
yield the same result.
If cmake_build_type is specified,
cppad_debug_which
must be the empty string.
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 |
|
make files for unix operating system |
|
make files for Visual Studio |
|
make files for msys2 |
|
Ninja build system |
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 2019 .)
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-or
,
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 user 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 user_guide.html
is installed in the location
/
usr/share/doc/cppad/user_guide.html
If cmake_install_docdir is not specified, or include_doc is false, the documentation files are not installed.
cmake_defined_ok¶
The default value for this option is true.
It must be true when running cmake with a non-empty
CMakeCache.txt
file.
If it is false, some checks will be made to make sure
certain variables are not defined twice.
include_doc¶
The default value for this option is false.
If it is true, is in the command line, the
xrst
program must be installed.
In this case, the user and developer documentation targets
doc_user
and doc_dev
will be available.
For example, if the generator is Ninja
the commands ninja doc_user
and ninja doc_dev
will build the corresponding documentation in the
build/html
sub-directory of the
Distribution Directory .
cppad_static_lib¶
The default value for this option is true on
msys
, cygwin
and Windows
and false otherwise.
the cppad library will be a static (shared) library.
If the target system uses windows dlls, this setting should be true and
if it is false, a warning will be issued and it will be ignored.
cppad_debug_and_release¶
The default value for this option is true.
If it is true,
the debug and release versions of CppAD can be mixed in the same program.
This must be true if
cppad_debug_which is debug_even
or debug_odd
.
If NDEBUG
is defined and cppad_debug_and_release is false,
thread_alloc does more error checking.
For programs that do a lot of memory allocation,
this can take a significant amount of time.
This is meant for testing CppAD and as a last resort when debugging.
include_adolc¶
The default value for this option is false.
If it is true,
the adolc examples will be compiled and tested.
In this case, adolc.pc
must be in the PKG_CONFIG_PATH
.
include_ipopt¶
The default value for this option is false.
If it is true,
the ipopt examples will be compiled and tested.
In this case, ipopt.pc
must be in the PKG_CONFIG_PATH
.
In addition, ipopt_solve and cppad_ipopt_nlp
will be installed.
include_cppadcg¶
The default value for this option is false. If it is true, the cppadcg examples will be compiled and tested. 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. This option, and the script get_cppadcg.sh are only intended for testing purposes.
package_prefix¶
Each of these packages do not have pkg-config
files
corresponding to optional CppAD examples.
If a prefix listed below is on the command line,
the corresponding examples will be compiled and run:
colpack_prefix |
|
fadbad_prefix |
|
sacado_prefix |
cppad_cxx_flags¶
This specifies the compiler flags
that are used when compiling the CppAD examples, tests, and library.
This flags are in addition to the flags automatically generated by
cmake for debug and release build; i.e.,
CMAKE_CXX_FLAGS_DEBUG and CMAKE_CXX_FLAGS_RELEASE .
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++17 -Wshadow"
C++17¶
In order for the compiler to take advantage of features that are in C++17 ,but not in C++11, the cppad_cxx_flags must enable these features.
cppad_link_flags¶
This specifies additional flags to use during linking.
The default value for these flags is the empty string ""
.
-m32¶
If you are on a 64 bit machine and using g++ to
compile for 32 bit code, you need to add -m32
to both
the additional compiler and linker flags.
If -m32
is in cppad_link_flags ,
the OpenMP, Boost, jit , and
speed_cppad_jit examples will not be tested.
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_listgprof -b speed_profile
| sed -f gprof.sed
cppad_testvector¶
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:
cppad_debug_which |
CMAKE_BUILD_TYPE |
|
|
|
|
|
not specified |
|
not specified |
empty string |
not changed |
If CMAKE_BUILD_TYPE
is specified on the command line,
then cppad_debug_which must be the empty string (its default value).