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)
 |