CDS suports both in-source and out-of-source cmake build types. Now project uses:
- CMake: general cross-platform building
- CTest: all unit tests can be run in a standard way by ctest command
- CPack: for making rpm/deb/nsys etc. packages
Building out-of-source in "RELEASE" mode ("DEBUG" is default)
- Wherever create empty directory for building, for instance
libcds-debug
- Prepare:
cmake -DCMAKE_BUILD_TYPE=RELEASE <path to the project's root directory with CMakeLists.txt>
- Compile:
make -j4
- As a result you'll see shared and static cds libraries in the build directory
Warning: We strongly recommend not to use static cds library. Static library is not tested and not maintained. You can use it on own risk.
After using command cmake -L <path to the project's root directory with CMakeLists.txt> one can see some additional variables, that can activate additional features:
LIBCDS_WITH_TESTS:BOOL=OFF
: if you want to build library with unit testing support use -DLIBCDS_WITH_TESTS=ON on prepare step. Be careful with this flag, because compile time will dramatically increaseLIBCDS_WITH_TESTS_COVERAGE:BOOL=OFF
: Analyze test coverage using gcov (only for gcc)LIBCDS_WITH_BOOST_ATOMIC:BOOL=OFF
: Use boost atomics (only for boost >= 1.54)LIBCDS_WITH_ASAN:BOOL=OFF
: compile libcds with AddressSanitizer instrumentationLIBCDS_WITH_TSAN:BOOL=OFF
: compile libcds with ThreadSanitizer instrumentation
Additional gtest hints (for unit and stress tests only):
GTEST_INCLUDE_DIRS=path
: gives fullpath
to gtest include dir.GTEST_LIBRARY=path
: gives fullpath
tolibgtest.a
.
In order to package library CPack is used, command cpack -G should create correspondent packages for particular operating system. Now the project supports building the following package types:
- RPM: redhat-based linux distribs
- DEB: debian-based linux distribs
- TGZ: simple "tgz" archive with library and headers
- NSYS: windows installer package (NSYS should be installed)
git clone https://github.com/khizmax/libcds.git
mkdir libcds-release
cd libcds-release
cmake -DLIBCDS_WITH_TESTS=ON -DCMAKE_BUILD_TYPE=RELEASE ../libcds
-- The C compiler identification is GNU 4.8.3
-- The CXX compiler identification is GNU 4.8.3
...
-- Found Threads: TRUE
-- Boost version: 1.54.0
-- Found the following Boost libraries:
-- system
-- thread
Build type -- RELEASE
-- Configuring done
-- Generating done
-- Build files have been written to: <...>/libcds-release
make -j4
Scanning dependencies of target cds
Scanning dependencies of target test-common
Scanning dependencies of target cds-s
Scanning dependencies of target test-hdr-offsetof
[ 1%] Building CXX object CMakeFiles/cds-s.dir/src/hp_gc.cpp.o
...
[100%] Built target test-hdr
ctest
Test project /home/kel/projects_cds/libcds-debug
Start 1: test-hdr
1/7 Test #1: test-hdr ......................... Passed 1352.24 sec
Start 2: cdsu-misc
2/7 Test #2: cdsu-misc ........................ Passed 0.00 sec
Start 3: cdsu-map
...
cpack -G RPM
CPack: Create package using RPM
CPack: Install projects
CPack: - Run preinstall target for: cds
CPack: - Install project: cds
CPack: - Install component: devel
CPack: - Install component: lib
CPack: Create package
CPackRPM:Debug: Adding /usr/local to builtin omit list.
CPackRPM: Will use GENERATED spec file: /home/kel/projects_cds/libcds-debug/_CPack_Packages/Linux/RPM/SPECS/cds-devel.spec
CPackRPM: Will use GENERATED spec file: /home/kel/projects_cds/libcds-debug/_CPack_Packages/Linux/RPM/SPECS/cds-lib.spec
CPack: - package: /home/kel/projects_cds/libcds-debug/cds-2.1.0-1-devel.rpm generated.
CPack: - package: /home/kel/projects_cds/libcds-debug/cds-2.1.0-1-lib.rpm generated.
- CDash: use CI system