1 Installation Instructions  | 
     1 Installation Instructions  | 
     2 =========================  | 
     2 =========================  | 
     3   | 
     3   | 
     4 Since you are reading this I assume you already obtained one of the release  | 
     4 This file contains instructions for building and installing LEMON from  | 
     5 tarballs and successfully extracted it. The latest version of LEMON is  | 
     5 source on Linux. The process on Windows is similar.  | 
     6 available at our web page (http://lemon.cs.elte.hu/).  | 
         | 
     7   | 
     6   | 
     8 LEMON provides two different build environments, one is based on "autotool",  | 
     7 Note that it is not necessary to install LEMON in order to use  | 
     9 while the other is based on "cmake". This file contains instructions only for  | 
     8 it. Instead, you can easily integrate it with your own code  | 
    10 the former one, which is the recommended build environment on Linux, Mac OSX  | 
     9 directly. For instructions, see  | 
    11 and other unices or if you use Cygwin on Windows. For cmake installation  | 
    10 https://lemon.cs.elte.hu/trac/lemon/wiki/HowToCompile  | 
    12 instructions visit http://lemon.cs.elte.hu.  | 
    11   | 
    13   | 
    12   | 
    14 In order to install LEMON from the extracted source tarball you have to  | 
    13 In order to install LEMON from the extracted source tarball you have to  | 
    15 issue the following commands:  | 
    14 issue the following commands:  | 
    16   | 
    15   | 
    17    1. `cd lemon-x.y.z'  | 
    16    1. Step into the root of the source directory.  | 
    18   | 
    17   | 
    19       This command changes to the directory which was created when you  | 
    18       $ cd lemon-x.y.z  | 
    20       extracted the sources. The x.y.z part is a version number.  | 
         | 
    21   | 
    19   | 
    22    2. `./configure'  | 
    20    2. Create a build subdirectory and step into it.  | 
    23   | 
    21   | 
    24       This command runs the configure shell script, which does some checks and  | 
    22       $ mkdir build  | 
    25       creates the makefiles.  | 
    23       $ cd build  | 
    26   | 
    24   | 
    27    3. `make'  | 
    25    3. Perform system checks and create the makefiles.  | 
    28   | 
    26   | 
    29       This command compiles the non-template part of LEMON into libemon.a  | 
    27       $ cmake ..  | 
    30       file. It also compiles the programs in the tools subdirectory by  | 
         | 
    31       default.  | 
         | 
    32   | 
    28   | 
    33    4. `make check'  | 
    29    4. Build LEMON.  | 
    34   | 
    30   | 
    35       This step is optional, but recommended. It runs the test programs that  | 
    31       $ make   | 
    36       we developed for LEMON to check whether the library works properly on  | 
         | 
    37       your platform.  | 
         | 
    38   | 
    32   | 
    39    5. `make install'  | 
    33       This command compiles the non-template part of LEMON into  | 
         | 
    34       libemon.a file. It also compiles the programs in the 'tools' and  | 
         | 
    35       'demo' subdirectories.  | 
         | 
    36   | 
         | 
    37    5. [Optional] Compile and run the self-tests.  | 
         | 
    38   | 
         | 
    39       $ make check  | 
         | 
    40   | 
         | 
    41    5. [Optional] Generate the user documentation.  | 
         | 
    42   | 
         | 
    43       $ make html  | 
         | 
    44   | 
         | 
    45       The release tarballs already include the documentation.  | 
         | 
    46   | 
         | 
    47       Note that for this step you need to have the following tools  | 
         | 
    48       installed: Python, Doxygen, Graphviz, Ghostscript, LaTeX.  | 
         | 
    49   | 
         | 
    50    6. [Optional] Install LEMON  | 
         | 
    51   | 
         | 
    52       $ make install  | 
    40   | 
    53   | 
    41       This command installs LEMON under /usr/local (you will need root  | 
    54       This command installs LEMON under /usr/local (you will need root  | 
    42       privileges to be able to do that). If you want to install it to some  | 
    55       privileges to be able to do that). If you want to install it to  | 
    43       other location, then pass the --prefix=DIRECTORY flag to configure in  | 
    56       some other location, then pass the  | 
    44       step 2. For example: `./configure --prefix=/home/username/lemon'.  | 
    57       -DCMAKE_INSTALL_PREFIX=DIRECTORY flag to cmake in Step 3.  | 
    45   | 
    58       For example:  | 
    46    6. `make install-html'  | 
    59         | 
    47   | 
    60       $ cmake -DCMAKE_INSTALL_PREFIX=/home/username/lemon'  | 
    48       This command installs the documentation under share/doc/lemon/docs. The  | 
         | 
    49       generated documentation is included in the tarball. If you want to  | 
         | 
    50       generate it yourself, then run `make html'. Note that for this you need  | 
         | 
    51       to have the following programs installed: Doxygen, Graphviz, Ghostscript,  | 
         | 
    52       Latex.  | 
         | 
    53   | 
         | 
    54   | 
    61   | 
    55 Configure Options and Variables  | 
    62 Configure Options and Variables  | 
    56 ===============================  | 
    63 ===============================  | 
    57   | 
    64   | 
    58 In step 2 you can customize the actions of configure by setting variables  | 
    65 In Step 3, you can customize the build process by passing options to CMAKE.  | 
    59 and passing options to it. This can be done like this:  | 
         | 
    60 `./configure [OPTION]... [VARIABLE=VALUE]...'  | 
         | 
    61   | 
    66   | 
    62 Below you will find some useful variables and options (see `./configure --help'  | 
    67 $ cmake [OPTIONS] ..  | 
    63 for more):  | 
         | 
    64   | 
    68   | 
    65 CXX='comp'  | 
    69 You find a list of the most useful options below.  | 
    66   | 
    70   | 
    67   Change the C++ compiler to 'comp'.  | 
    71 -DCMAKE_INSTALL_PREFIX=PREFIX  | 
    68   | 
         | 
    69 CXXFLAGS='flags'  | 
         | 
    70   | 
         | 
    71   Pass the 'flags' to the compiler. For example CXXFLAGS='-O3 -march=pentium-m'  | 
         | 
    72   turns on generation of aggressively optimized Pentium-M specific code.  | 
         | 
    73   | 
         | 
    74 --prefix=PREFIX  | 
         | 
    75   | 
    72   | 
    76   Set the installation prefix to PREFIX. By default it is /usr/local.  | 
    73   Set the installation prefix to PREFIX. By default it is /usr/local.  | 
    77   | 
    74   | 
    78 --enable-tools  | 
    75 -DCMAKE_BUILD_TYPE=[Release|Debug|Maintainer|...]  | 
    79   | 
    76   | 
    80    Build the programs in the tools subdirectory (default).  | 
    77   This sets the compiler options. The choices are the following  | 
    81   | 
    78   | 
    82 --disable-tools  | 
    79   'Release': A strong optimization is turned on (-O3 with gcc). This  | 
         | 
    80     is the default setting and we strongly recommend using this for  | 
         | 
    81     the final compilation.  | 
    83   | 
    82   | 
    84    Do not build the programs in the tools subdirectory.  | 
    83   'Debug': Optimization is turned off and debug info is added (-O0  | 
         | 
    84     -ggdb with gcc). If is recommended during the development.  | 
    85   | 
    85   | 
    86 --with-glpk[=PREFIX]  | 
    86   'Maintainer': The same as 'Debug' but the compiler warnings are  | 
         | 
    87     converted to errors (-Werror with gcc). In addition, 'make' will  | 
         | 
    88     also automatically compile and execute the test codes. It is the  | 
         | 
    89     best way of ensuring that LEMON codebase is clean and safe.  | 
    87   | 
    90   | 
    88    Enable GLPK support (default). You should specify the prefix too if  | 
    91   'RelWithDebInfo': Optimized build with debug info.  | 
    89    you installed GLPK to some non-standard location (e.g. your home  | 
         | 
    90    directory). If it is not found, GLPK support will be disabled.  | 
         | 
    91   | 
    92   | 
    92 --with-glpk-includedir=DIR  | 
    93   'MinSizeRel': Size optimized build (-Os with gcc)  | 
    93   | 
    94   | 
    94    The directory where the GLPK header files are located. This is only  | 
    95 -DTEST_WITH_VALGRIND=YES  | 
    95    useful when the GLPK headers and libraries are not under the same  | 
         | 
    96    prefix (which is unlikely).  | 
         | 
    97   | 
    96   | 
    98 --with-glpk-libdir=DIR  | 
    97   Using this, the test codes will be executed using valgrind. It is a  | 
         | 
    98   very effective way of identifying indexing problems and memory leaks.  | 
    99   | 
    99   | 
   100    The directory where the GLPK libraries are located. This is only  | 
   100 -DCMAKE_CXX_COMPILER=path-to-compiler  | 
   101    useful when the GLPK headers and libraries are not under the same  | 
         | 
   102    prefix (which is unlikely).  | 
         | 
   103   | 
   101   | 
   104 --without-glpk  | 
   102   Change the compiler to be used.  | 
   105   | 
   103   | 
   106    Disable GLPK support.  | 
   104 -DBUILD_SHARED_LIBS=TRUE  | 
   107   | 
   105   | 
   108 --with-cplex[=PREFIX]  | 
   106   Build shared library instead of static one. Think twice if you  | 
         | 
   107   really want to use this option.  | 
   109   | 
   108   | 
   110    Enable CPLEX support (default). You should specify the prefix too  | 
   109 -DGLPK_ROOT_DIR=DIRECTORY  | 
   111    if you installed CPLEX to some non-standard location  | 
   110 -DCOIN_ROOT_DIR=DIRECTORY  | 
   112    (e.g. /opt/ilog/cplex75). If it is not found, CPLEX support will be  | 
   111 -DCPLEX_ROOT_DIR=DIRECTORY  | 
   113    disabled.  | 
         | 
   114   | 
   112   | 
   115 --with-cplex-includedir=DIR  | 
   113   Install root directory prefixes of optional third party libraries.  | 
   116   | 
         | 
   117    The directory where the CPLEX header files are located. This is  | 
         | 
   118    only useful when the CPLEX headers and libraries are not under the  | 
         | 
   119    same prefix (e.g.  /usr/local/cplex/cplex75/include).  | 
         | 
   120   | 
         | 
   121 --with-cplex-libdir=DIR  | 
         | 
   122   | 
         | 
   123    The directory where the CPLEX libraries are located. This is only  | 
         | 
   124    useful when the CPLEX headers and libraries are not under the same  | 
         | 
   125    prefix (e.g.  | 
         | 
   126    /usr/local/cplex/cplex75/lib/i86_linux2_glibc2.2_gcc3.0/static_pic_mt).  | 
         | 
   127   | 
         | 
   128 --without-cplex  | 
         | 
   129   | 
         | 
   130    Disable CPLEX support.  | 
         | 
   131   | 
         | 
   132 --with-soplex[=PREFIX]  | 
         | 
   133   | 
         | 
   134    Enable SoPlex support (default). You should specify the prefix too if  | 
         | 
   135    you installed SoPlex to some non-standard location (e.g. your home  | 
         | 
   136    directory). If it is not found, SoPlex support will be disabled.  | 
         | 
   137   | 
         | 
   138 --with-soplex-includedir=DIR  | 
         | 
   139   | 
         | 
   140    The directory where the SoPlex header files are located. This is only  | 
         | 
   141    useful when the SoPlex headers and libraries are not under the same  | 
         | 
   142    prefix (which is unlikely).  | 
         | 
   143   | 
         | 
   144 --with-soplex-libdir=DIR  | 
         | 
   145   | 
         | 
   146    The directory where the SoPlex libraries are located. This is only  | 
         | 
   147    useful when the SoPlex headers and libraries are not under the same  | 
         | 
   148    prefix (which is unlikely).  | 
         | 
   149   | 
         | 
   150 --without-soplex  | 
         | 
   151   | 
         | 
   152    Disable SoPlex support.  | 
         | 
   153   | 
         | 
   154 --with-coin[=PREFIX]  | 
         | 
   155   | 
         | 
   156    Enable support for COIN-OR solvers (CLP and CBC). You should  | 
         | 
   157    specify the prefix too. (by default, COIN-OR tools install  | 
         | 
   158    themselves to the source code directory). This command enables the  | 
         | 
   159    solvers that are actually found.  | 
         | 
   160   | 
         | 
   161 --with-coin-includedir=DIR  | 
         | 
   162   | 
         | 
   163    The directory where the COIN-OR header files are located. This is  | 
         | 
   164    only useful when the COIN-OR headers and libraries are not under  | 
         | 
   165    the same prefix (which is unlikely).  | 
         | 
   166   | 
         | 
   167 --with-coin-libdir=DIR  | 
         | 
   168   | 
         | 
   169    The directory where the COIN-OR libraries are located. This is only  | 
         | 
   170    useful when the COIN-OR headers and libraries are not under the  | 
         | 
   171    same prefix (which is unlikely).  | 
         | 
   172   | 
         | 
   173 --without-coin  | 
         | 
   174   | 
         | 
   175    Disable COIN-OR support.  | 
         | 
   176   | 
         | 
   177   | 
   114   | 
   178 Makefile Variables  | 
   115 Makefile Variables  | 
   179 ==================  | 
   116 ==================  | 
   180   | 
   117   | 
   181 Some Makefile variables are reserved by the GNU Coding Standards for  | 
   118 make VERBOSE=1  | 
   182 the use of the "user" - the person building the package. For instance,  | 
         | 
   183 CXX and CXXFLAGS are such variables, and have the same meaning as  | 
         | 
   184 explained in the previous section. These variables can be set on the  | 
         | 
   185 command line when invoking `make' like this:  | 
         | 
   186 `make [VARIABLE=VALUE]...'  | 
         | 
   187   | 
   119   | 
   188 WARNINGCXXFLAGS is a non-standard Makefile variable introduced by us  | 
   120    This results in a more verbose output by showing the full  | 
   189 to hold several compiler flags related to warnings. Its default value  | 
   121    compiler and linker commands.  | 
   190 can be overridden when invoking `make'. For example to disable all  | 
         | 
   191 warning flags use `make WARNINGCXXFLAGS='.  | 
         | 
   192   | 
         | 
   193 In order to turn off a single flag from the default set of warning  | 
         | 
   194 flags, you can use the CXXFLAGS variable, since this is passed after  | 
         | 
   195 WARNINGCXXFLAGS. For example to turn off `-Wold-style-cast' (which is  | 
         | 
   196 used by default when g++ is detected) you can use  | 
         | 
   197 `make CXXFLAGS="-g -O2 -Wno-old-style-cast"'.  | 
         |