<!--toc-->
|
|
## 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, 2.8.x is recommended.
|
- Zlib library
|
- PCRE library.
|
- Python >=2.4 (but not 3)
|
|
|
### Recommended Dependencies
|
|
- ICU Library 3.6 and above -- support
|
of advanced localization features.
|
- gcrypt or OpenSSL library -- for support
|
of encrypted session cookies.
|
|
If both available gcrypt would be used.
|
|
### Suggested
|
|
- iconv library (if libc does not provide iconv interface)
|
|
### Dependencies for Common Linux Distributions
|
|
Debian Based (Debian, Ubuntu):
|
|
Packages: cmake libpcre3-dev zlib1g-dev libgcrypt11-dev libicu-dev python
|
|
Getting:
|
|
aptitude install cmake libpcre3-dev zlib1g-dev libgcrypt11-dev libicu-dev python
|
|
RPM Based (RadHat, CentOS, Fedora, Suse):
|
|
Packages: cmake gcc-c++ gcc make zlib-devel pcre-devel libicu-devel libgcrypt-devel
|
|
Getting:
|
|
yum install cmake gcc-c++ gcc make zlib-devel pcre-devel libicu-devel libgcrypt-devel
|
|
### Notes for Microsoft Visual C++ users
|
|
Building cppcms with Visual Studio projects is not supported due to complexity of debug and release mode.
|
|
You should use nmake as shown in the example.
|
|
## Getting The Sources
|
|
Download the latest cppcms-1.x.x.tar.bz2 from [sourceforge](https://sourceforge.net/projects/cppcms/files/) and extract it:
|
|
tar -xjf cppcms-1.0.4.tar.bz2
|
|
If you want to get latest version
|
You need git to get the sources:
|
|
git clone https://github.com/artyom-beilis/cppcms.git cppcms
|
|
|
## 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
|
|
|
## 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.
|
- `-DDISABLE_OPENSSL=ON` -- disable usage of OpenSSL.
|
- `-DUSE_WINDOWS6_API=ON` -- use Windows Vista, Windows 7 API if possible, allows CppCMS using native Windows Vista/7 conditional variables and other advanced API. By default disabled.
|
- `-DLIBDIR=lib64` - use alternative name for library directory, for example use lib64 on Red Hat based distributions.
|
|
_Generic Size Optimization Options for Embedded Builds:_
|
|
- `-DDISABLE_FCGI=ON` -- build without FastCGI Server API.
|
- `-DDISABLE_SCGI=ON` -- build without SCGI Server API.
|
- `-DDISABLE_HTTP=ON` -- build without internal HTTP server.
|
- `-DDISABLE_ICU_LOCALE=ON` -- do not use ICU for localization but rather C++ `std::locale`, Windows API or POSIX API based localization -- many localization features would not be available, but it may be useful for embedded builds.
|
- `-DDISABLE_PREFORK_CACHE=ON` - disable cache support for preforking modes (process shared cache)
|
- `-DDISABLE_TCPCACHE=ON` - disable distributed cache support (memcached-like solution support)
|
- `-DDISABLE_CACHE=ON` - disable caching system at all.
|
- `-DDISABLE_GZIP=ON` - disable output gzip compression support (eliminates dependency on zlib)
|
|
_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
|
|
## Examples
|
|
### POSIX Operating Systems
|
|
|
I assume that you are in a terminal in the build directory inside the CppCMS source directory.
|
|
Build under Linux, FreeBSD and Cygwin:
|
|
cmake ..
|
make
|
make test
|
make install
|
|
Build under OpenSolaris with SunStudio
|
|
cmake -DCMAKE_C_COMPILER=/usr/bin/suncc -DCMAKE_CXX_COMPILER=/usr/bin/sunCC ..
|
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
|
|
|
### Microsoft Windows
|
|
We assume that 3rd part libraries installed in `c:\3rd_part` 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:\3rd_part\lib;%PATH%
|
set PATH=d:\projects\cppcms\build\booster;%PATH%
|
|
Under bash:
|
|
export PATH=/c/3rd_part/lib:"$PATH"
|
export PATH=/d/projects/cppcms/build/booster:"$PATH"
|
|
_MinGW Builds:_
|
|
For mingw builds you also need to pass a path to the mingw's
|
library directory, otherwise it may not find winsock
|
library correctly. Assuming you have mingw installed
|
in `c:\mingw`
|
|
Open MinGW Shell terminal
|
|
cmake -G "MSYS Makefiles" -DCMAKE_INCLUDE_PATH=c:/3rd_part/include -DCMAKE_LIBRARY_PATH="c:/3rd_part/lib;c:/mingw/lib" -DCMAKE_INSTALL_PREFIX=c:/mingw ..
|
make
|
make test
|
make install
|
|
_MSVC Builds:_
|
|
Note: You can find [a full tutorial regarding MSVC build there](/wikipp/en/page/windows_msvc_build)
|
|
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:/3rd_part/include -DCMAKE_LIBRARY_PATH=c:/3rd_part/lib -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=c:/cppcms ..
|
nmake
|
nmake test
|
nmake install
|
|
### 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 -DDISABLE_ICU_LOCALIZATION=ON -DCMAKE_ISTALL_PREFIX=/usr/arm-linux-eabi ..
|
make
|
make install
|
|
---
|
|
← [CppCMS versioning scheme][prev]
|
| [Top](#maincontent)
|
| [Migration to new version][next] →
|
|
[prev]: /wikipp/en/page/cppcms_versioning_scheme
|
[next]: /wikipp/en/page/cppcms_1x_migration |