This guide covers the build instructions for the stand-alone web server. See Embedding.md for information on extending an existing C or C++ application. A brief overview of the source code files can be found in Embedding.md as well.
The latest version can be found at https://github.com/civetweb/civetweb
Released versions can be found at https://github.com/civetweb/civetweb/releases
Open the VS/civetweb.sln in Visual Studio. To include SSL support, you may have to add an extra library for the cryptography support. You might wish to use yaSSL. However, it is GPL licensed or uses a commercial license. See yaSSL.md for more information. Alternatively, you might wish to use OpenSSL. See OpenSSL.md for more information.
In the start menu locate and run the “Run terminal” batch file. For TDM-GCC this is named “MinGW Command Prompt”. Navigate to the civetweb sources directory and run:
Open the Qt Designer project in the Qt folder
Except for the components in the
third_party folder (e.g., Lua and Duktape), CivetWeb can also be built with CMake. CMake can be used for all supported operating systems.
Get a list of all supported make option
compile the code
Install on the system, Linux only.
make lib WITH_CPP=1 WITH_IPV6=1 make clean slib WITH_CPP=1 WITH_LUA=1 WITH_WEBSOCKET=1
Build the static and shared libraries. The WITH_CPP make option is to include the CivetServer class. The additional make options configure the library just as it would the application.
The slib option should be done on a separate clean build as position independent code (PIC) is required for it. Trying to run it after building the static library or the server will result in a link error.
Clean up files generated during the build
Make options can be set on the command line with the make command like so.
make build WITH_LUA=1
|WITH_LUA=1||build with Lua support|
|WITH_DEBUG=1||build with GDB debug support|
|WITH_IPV6=1||with IPV6 support|
|WITH_WEBSOCKET=1||build with web socket support|
|WITH_SERVER_STATS=1||build with support for server statistics|
|WITH_CPP=1||build libraries with c++ classes|
|CONFIG_FILE=file||use ‘file’ as the config file|
|CONFIG_FILE2=file||use ‘file’ as the backup config file|
|HTMLDIR=/path||place to install initial web pages|
|DOCUMENT_ROOT=/path||HTMLDIR override, config option, install|
|nothing is installed here.|
|PORTS=8080||listening ports override when installing|
|SSL_LIB=libssl.so.0||use versioned SSL library|
|CRYPTO_LIB=libcrypto.so.0||system versioned CRYPTO library|
|PREFIX=/usr/local||sets the install directory|
|COPT=‘-DNO_SSL’||method to insert compile flags|
Note that the WITH_* options used for make are not identical to the preprocessor defines in the source code - usually USE_* is used there.
To change the target destination pass the
PREFIX option to the command
make install (not
make build). Example usage:
$ make build $ make -n install PREFIX=/opt/civetweb
-n corresponds to the
--dry-run option (it does not make any changes): You can see where
make install would install. Example output of the above command:
$ make -n install PREFIX=/opt/civetweb install -d -m 755 "/opt/civetweb/share/doc/civetweb" install -m 644 resources/itworks.html /opt/civetweb/share/doc/civetweb/index.html install -m 644 resources/civetweb_64x64.png /opt/civetweb/share/doc/civetweb/ install -d -m 755 "/opt/civetweb/etc" install -m 644 resources/civetweb.conf "/opt/civetweb/etc/" sed -i 's#^document_root.*$#document_root /opt/civetweb/share/doc/civetweb#' "/opt/civetweb/etc/civetweb.conf" sed -i 's#^listening_ports.*$#listening_ports 8080#' "/opt/civetweb/etc/civetweb.conf" install -d -m 755 "/opt/civetweb/share/doc/civetweb" install -m 644 *.md "/opt/civetweb/share/doc/civetweb" install -d -m 755 "/opt/civetweb/bin" install -m 755 civetweb "/opt/civetweb/bin/"
If the output looks good: Just remove the
-n option to actually install the software on your system.
Compile flags can be set using the COPT make option like so.
make build COPT="-DNDEBUG -DNO_CGI"
|NDEBUG||strip off all debug code|
|DEBUG||build debug version (very noisy)|
|NO_CGI||disable CGI support|
|NO_CACHING||disable caching functionality|
|NO_SSL||disable SSL functionality|
|NO_SSL_DL||link against system libssl library|
|NO_FILES||do not serve files from a directory|
|SQLITE_DISABLE_LFS||disables large files (Lua only)|
|SSL_ALREADY_INITIALIZED||do not initialize libcrypto|
Take total control with CC, COPT and TARGET_OS as make options. TARGET_OS is used to determine some compile details as will as code function. TARGET_OS values should be be one found in resources/Makefile.in-os.
make CC=arm-none-linux-gnueabi-gcc COPT="-march=armv7-a -mfpu=vfp -mfloat-abi=softfp" TARGET_OS=FROG
Use the alternate Makefile.osx to do the build. The entire build has to be done using Makefile.osx because additional compile and link options are required. This Makefile has all the same options as the other one plus one additional package rule.
make -f Makefile.osx package
Buildroot is a tool for creating cross compiled file systems. Including Civetweb in buildroot is fairly easy. There is even support for various build options.
This is a small guide to help you run civetweb on Android, originally tested on the HTC Wildfire. Note: You do not need root access to run civetweb on Android.
/path-to-ndk/ndk-build -C /path-to-civetweb/resourcesThat should generate civetweb/lib/armeabi/civetweb
/data/localfolder on device.
http://127.0.0.1:8080You should see the
Index of /page.
jnistands for Java Native Interface. Read up on Android NDK if you want to know how to interact with the native C functions of civetweb in Android Java applications.