186 lines
5.8 KiB
CMake
186 lines
5.8 KiB
CMake
cmake_minimum_required(VERSION 3.5)
|
|
project(
|
|
SimpleLibrary
|
|
VERSION 1.0.0
|
|
LANGUAGES CXX)
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
#
|
|
# auto genrate a stamp header
|
|
#
|
|
execute_process(
|
|
COMMAND git rev-parse --short HEAD
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE GIT_HASH
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
execute_process(
|
|
COMMAND git rev-parse --abbrev-ref HEAD
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE GIT_BRANCH
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
set(CUSTOM_VALUE "Blah blah custom value.")
|
|
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/version.h.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/include/simple/version.h")
|
|
|
|
add_custom_target(
|
|
generate_version_h ALL
|
|
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/include/simple/version.h")
|
|
|
|
#
|
|
# Build
|
|
#
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")
|
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
|
"${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2 -g -DNDEBUG")
|
|
set(CMAKE_BUILD_TYPE
|
|
"Release"
|
|
CACHE STRING "Choose the type of build." FORCE)
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
|
|
"RelWithDebInfo")
|
|
|
|
file(GLOB_RECURSE SOURCES "src/*.cpp")
|
|
# file(GLOB_RECURSE HEADERS "include/*.h")
|
|
|
|
# shared - set_target_properties is so that the binary is libSimpleLibrary.so
|
|
# add_depdencies so the config.h file is auto generated
|
|
add_library(SimpleLibraryShared SHARED ${SOURCES})
|
|
target_include_directories(
|
|
SimpleLibraryShared
|
|
PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/simple>
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
|
|
$<INSTALL_INTERFACE:include/simple>)
|
|
set_target_properties(SimpleLibraryShared PROPERTIES OUTPUT_NAME
|
|
"SimpleLibrary")
|
|
add_dependencies(SimpleLibraryShared generate_version_h doc_doxygen)
|
|
|
|
# static - set_target_properties is so that the binary is libSimpleLibrary.a
|
|
# add_depdencies so the config.h file is auto generated
|
|
add_library(SimpleLibraryStatic STATIC ${SOURCES})
|
|
set_target_properties(SimpleLibraryStatic PROPERTIES OUTPUT_NAME
|
|
"SimpleLibrary")
|
|
target_include_directories(
|
|
SimpleLibraryStatic
|
|
PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/simple>
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
|
|
$<INSTALL_INTERFACE:include/simple>)
|
|
add_dependencies(SimpleLibraryStatic generate_version_h doc_doxygen)
|
|
|
|
#
|
|
# Test
|
|
#
|
|
enable_testing()
|
|
add_subdirectory(test)
|
|
|
|
#
|
|
# doxygen
|
|
#
|
|
find_package(Doxygen REQUIRED)
|
|
set(DOXYGEN_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
|
|
set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
|
|
|
|
configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
|
|
add_custom_target(
|
|
doc_doxygen # ALL otherwise it's constantly being rebuilt
|
|
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMENT "Generating API documentation with Doxygen"
|
|
VERBATIM)
|
|
|
|
#
|
|
# man page
|
|
#
|
|
# look into pandoc that'll turn markdown into man pages.
|
|
add_custom_target(
|
|
man ALL
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/man
|
|
${CMAKE_CURRENT_BINARY_DIR}/man
|
|
COMMENT "Copying man pages")
|
|
|
|
#
|
|
# CMake find support
|
|
#
|
|
include(CMakePackageConfigHelpers)
|
|
write_basic_package_version_file(
|
|
"${CMAKE_CURRENT_BINARY_DIR}/SimpleLibraryConfigVersion.cmake"
|
|
VERSION ${PROJECT_VERSION}
|
|
COMPATIBILITY AnyNewerVersion)
|
|
|
|
configure_package_config_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/SimpleLibraryConfig.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/SimpleLibraryConfig.cmake"
|
|
INSTALL_DESTINATION lib/cmake/SimpleLibrary)
|
|
|
|
#
|
|
# Install
|
|
#
|
|
install(
|
|
TARGETS SimpleLibraryShared SimpleLibraryStatic
|
|
ARCHIVE DESTINATION lib
|
|
LIBRARY DESTINATION lib
|
|
RUNTIME DESTINATION bin
|
|
PUBLIC_HEADER DESTINATION include/simple)
|
|
|
|
install(DIRECTORY include/simple/ DESTINATION include/simple)
|
|
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/include/simple/version.h"
|
|
DESTINATION include/simple)
|
|
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SimpleLibraryConfig.cmake"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/SimpleLibraryConfigVersion.cmake"
|
|
DESTINATION lib/cmake/SimpleLibrary)
|
|
|
|
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc/html
|
|
DESTINATION share/doc/SimpleLibrary)
|
|
|
|
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/man/ DESTINATION share/man)
|
|
|
|
#
|
|
# CPack
|
|
#
|
|
set(CPACK_PACKAGE_NAME "SimpleLibrary")
|
|
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
|
|
set(CPACK_PACKAGE_CONTACT "RAS <sprague.a.rick@gmail.com>")
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A simple library example")
|
|
set(CPACK_PACKAGE_VENDOR "Your Organization")
|
|
set(CPACK_PACKAGE_LICENSE "MIT")
|
|
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
|
|
set(CPACK_SOURCE_PACKAGE_FILE_NAME
|
|
"${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Source")
|
|
|
|
# Debian specific settings
|
|
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "RAS <sprague.a.rick@gmail.com>")
|
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.27)")
|
|
set(CPACK_DEBIAN_PACKAGE_SECTION "devel")
|
|
set(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
|
|
|
|
include(CPack)
|
|
|
|
cpack_add_component_group(Development)
|
|
cpack_add_component(
|
|
Headers
|
|
DISPLAY_NAME "C++ Headers"
|
|
DESCRIPTION "C++ header files for SimpleLibrary"
|
|
GROUP Development
|
|
REQUIRED)
|
|
cpack_add_component(
|
|
Libraries
|
|
DISPLAY_NAME "Libraries"
|
|
DESCRIPTION "Shared and static libraries for SimpleLibrary"
|
|
GROUP Development
|
|
REQUIRED)
|
|
|
|
cpack_add_component(
|
|
Doxygen
|
|
DISPLAY_NAME "Doxygen Documentation"
|
|
DESCRIPTION "API documentation generated by Doxygen"
|
|
GROUP Development
|
|
REQUIRED)
|