The goal of this project is to store common files used by the 42ity projects with the new cmake structure
The cmake common settings will:
- include GNUInstallDirs variables
- include CTest
- create a target memcheck which run the test with valgrind
- set differents warnings
- define macros (more information bellow on each macro)
- define the following options:
option(BUILD_TESTING "Build tests" OFF)
option(BUILD_DOC "Build documentation" OFF)
To use it you have to add the following into your CMakeLists.txt file:
# Use common cmake settings
find_package(fty-cmake)
Dependency management is managed using the ExternalProject_add feature of CMake
.
The external directory provides the cmake files to download and build dependencies.
To build the dependencies you need to use the cmake option "ENABLE_STANDALONE=ON"
Target has follow syntax:
etn_target([type] [target name]
SOURCES
[sources list] (relative path from CMakeList folder / absolute path)
USES / USES_PRIVATE
[private dependencies list]
USES_PUBLIC
[public dependencies]
PUBLIC_INCLUDE_DIR
[directory of the public include] (relative path from CMakeList folder)
PUBLIC / PUBLIC_HEADERS
[public headers] (relative path from PUBLIC_INCLUDE_DIR folder or from CMakeList folder if PUBLIC_INCLUDE_DIR is not defined)
INCLUDE_DIRS
[extra include directories for private use]
PREPROCESSOR
[preprocessor definitions]
FLAGS
[extra compilation flags]
CMAKE
[extra cmake scripts]
CONFIGS
[configs]
Where type could be:
exe
- regular executablestatic
- static libraryshared
- shared libraryinterface
- non binary library, just headers, configs etc
USES
/USES_PRIVATE
are dependencies of the project for building only.
USES_PUBLIC
are dependencies of the project with are going to be propagated to the projects which use our project.
Firstly system will try to find dependency in the system.
If it will not found and ENABLE_STANDALONE is ON then will try to find it in external
projects and will add it to compilation process.
A simple executable where src is a subdirectory with the sources and private headers.
etn_target(exe ${PROJECT_NAME}
SOURCES
src/daemon.cpp
src/include.hpp
USES
tntdb
)
The executable named from the variable "${PROJECT_NAME}" will be install in ${CMAKE_INSTALL_PREFIX}/bin/${PROJECT_NAME}.
A shared library where src is a subdirectory with the sources and private headers, and public_includes/fty the path to the public headers.
etn_target(shared ${PROJECT_NAME}
SOURCES
src/myPrivateClass.cpp
src/myPrivateClass.h
src/myPublicClass.cpp
PUBLIC_INCLUDE_DIR
public_includes
PUBLIC_HEADERS
fty/myPublicClass.hpp
USES_PRIVATE
fty-common-log
USES_PUBLIC
fty-utils
)
The shared library named "lib${PROJECT_NAME}.so" will be install in "${CMAKE_INSTALL_PREFIX}/lib/${PROJECT_NAME}lib${PROJECT_NAME}.so"
The public header named "myPublicClass.hpp" will be install in "${CMAKE_INSTALL_PREFIX}/lib/fty/myPublicClass.hpp"
All the cmake package information files will be installed in ${CMAKE_INSTALL_PREFIX}/shared/cmake/..