- [Requirements](#req) |
- [Getting library](#get) |
- [Build Process](#bld) |
- [Build Options](#opt) |
- [Examples](#examples) |
- [POSIX Operating Systems](#posix) |
- [Microsoft Windows](#win32) |
- [Cross Compilation](#cross) |
|
|
## <class id="req"></class>Requirements |
|
In order to build CppCMS you need: |
|
_Mandatory Requirements_ |
|
- Modern C++ Compiler -- GCC, MSVC 9, Intel. See [supported compilers and platforms](/wikipp/en/page/cppcms_1x_platforms) |
- CMake 2.6 and above. |
- ICU Library 3.6 and above. |
- Python 2.4 |
- Subversion client in order to get source code. |
|
_Recommended Dependencies_ |
|
- gcrypt library -- for support of encrypted session cookies. |
|
_Suggested_ |
|
- iconv library (if libc does not provide iconv interface) |
|
## <class id="get"></class>Getting library |
|
You need Subversion to get the sources: |
|
svn co http://cppcms.svn.sourceforge.net/svnroot/cppcms/framework/branches/refactoring cppcms |
|
And then extract the cppcms_boost.tar.bz |
And then extract the cppcms_boost.tar.bz2 |
|
cd cppcms |
tar -xjf cppcms_boost.tar.bz |
tar -xjf cppcms_boost.tar.bz2 |
|
_Note:_ Under windows you may use 7zip in order to extract the file. |
|
## <class id="bld"></class>Build Process |
|
Go to the cppcms directory you created and create build directory and go to it: |
|
mkdir build |
cd build |
|
Now configure the library with CMake |
|
cmake .. |
|
Or |
|
cmake various_build_options .. |
|
|
Then run |
|
make |
make test |
make install |
|
|
## <class id="opt"></class>Build Options |
|
|
- `-DDISABLE_STATIC=ON` -- disable building of static version of cppcms library |
- `-DDISABLE_SHARED=ON` -- disable building of shared version of cppcms library |
- `-DDISABLE_ICONV=ON` -- disable usage of iconv (ICU would be used instead) |
- `-DDISABLE_GCRYPT=ON` -- disable usage of gcrypt library. No support of encrypted session cookies would be available (only signed one) |
- `-DDISABLE_FCGI=ON` -- build without FastCGI Server API. |
- `-DDISABLE_SCGI=ON` -- build without SCGI Server API. |
- `-DDISABLE_HTTP=ON` -- build without internal HTTP server. |
|
_Options for custom release:_ They would add "-c" suffix to the library name. The API and ABI of the library would not be compatible with standard builds and no ABI backward compatibility is provided. |
|
- `-DUSE_STD_LOCALES=ON` -- do not use ICU for localization but rather C++ `std::locale` based localization -- many localization features would not be available, but it may be useful for embedded builds. |
- `-DUSE_EXTERNAL_BOOST=ON` -- compile and link with external boost library instead of internal one (Boost 1.36 and above required). |
- `-DBOOST_SUFFIX=suffix` -- the suffix of Boost library you need to link to (when using external Boost). Note it is important for MSVC build where debug and release builds are not compatible. For example: `-DBOOST_SUFFIX=msvc9-mt-d` |
|
_Generic useful CMake options:_ |
|
- `-DCMAKE_BUILD_TYPE=(Debug|Release|RelWithDebInfo|MinSizeRel)` -- release type. RelWithDebInfo is default, unless using MSVC where Debug is default. |
|
- `-DCMAKE_INCLUDE_PATH=/path/to/include` -- path to location of libraries headers, provide it in order to find libraries headers installed in non-standard locations. You almost always need to provide it under Windows. |
- `-DCMAKE_LIBRARY_PATH=/path/to/lib` -- path to location of libraries, provide it in order to find libraries installed in non-standard locations. You almost always need to provide it under Windows. |
- `-DCMAKE_INSTALL_PREFIX=/usr/local` -- Installation prefix (similar to autoconf --prefix). Defaults to /usr/local |
|
## <class id="examples"></class>Examples |
|
### <class id="posix"></class>POSIX Operating Systems |
|
I assume that you are in terminal in build directory that is places inside CppCMS sources. |
|
Build under Linux, FreeBSD and Cygwin: |
|
cmake .. |
make |
make test |
make install |
|
Build under OpenSolaris with SunStudio |
|
CC=suncc CXX=sunCC cmake .. |
make |
make test |
make install |
|
Build under OpenSolaris with GCC, where ICU installed in /opt/icu |
|
cmake -DCMAKE_INCLUDE_PATH=/opt/icu/include -DCMAKE_LIBRARY_PATH=/opt/icu/lib .. |
make |
make test |
make install |
|
|
### <class id="win32"></class>Mircosoft Windows |
|
We assume that ICU installed in `c:\\icu` and |
sources are placed in `d:\\projects\\cppcms` |
|
_Note:_ You need to setup correct PATH variables in order |
to let system find all DLLs it needs. |
|
Under cmd.exe: |
|
set PATH=c:\icu\lib;%PATH% |
set PATH=d:\projects\cppcms\build\cppcms_boost;%PATH% |
|
Under bash: |
|
export PATH=/c/icu/lib:"$PATH" |
export PATH=/d/projects/cppcms/build:"$PATH" |
|
_MinGW Builds:_ |
|
Open MinGW Shell terminal |
|
cmake -G "MSYS Makefiles" -DCMAKE_INCLUDE_PATH=c:/icu/include -DCMAKE_LIBRARY_PATH=c:/icu/lib -DCMAKE_INSTALL_PREFIX=c:/mingw .. |
make |
make test |
make install |
|
_MSVC Builds:_ |
|
Open MSVC Shell terminal (All Programs > Microsoft Visual Studio 2008 > Visual Studio Tools > Visual Studio 2008 Command Prompt) |
|
|
cmake -G "NMake Makefiles" -DCMAKE_INCLUDE_PATH=c:/icu/include -DCMAKE_LIBRARY_PATH=c:/icu/lib -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=c:/cppcms .. |
nmake |
nmake test |
nmake install |
|
### <class id="cross"></class>Cross Compiling |
|
The build is just ordinary CMake cross-compilation procedure. For more information read <http://www.cmake.org/Wiki/CMake_Cross_Compiling> |
|
We would provide an example for ARM under Linux, without ICU. |
|
Create ToolChain.cmake |
|
SET(CMAKE_SYSTEM_NAME Linux) |
SET(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabi-gcc) |
SET(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabi-g++) |
SET(CMAKE_FIND_ROOT_PATH /usr/arm-linux-gnueabi) |
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) |
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) |
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) |
|
Configure |
|
cmake -DCMAKE_TOOLCHAIN_FILE=ToolChain.cmake -DUSE_STD_LOCALES=ON -DCMAKE_ISTALL_PREFIX=/usr/arm-linux-eabi .. |
make |
make install |
|
|