# Functions and Pre-build ----------------------------------- # Stop messy in source builds set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) set(CMAKE_DISABLE_SOURCE_CHANGES OFF) if ( ${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR} ) message( FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt." ) endif() # Start Build Config ----------------------------------- cmake_minimum_required(VERSION 3.8) set(CMAKE_SKIP_RPATH true) set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_COLOR_MAKEFILE ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Output name for the final binary set(AH_NAME "alarm-handler-srv") # Versioning set(VERSION_MAJOR "1") set(VERSION_MINOR "0") set(VERSION_PATCH "0") set(VERSION_METADATA "") set(VERSION_STRING ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) # Add any include paths from the command line list(APPEND INCLUDE_PATHS ${CMAKE_INCLUDE_PATH}) list(APPEND INCLUDE_PATHS ${CMAKE_SOURCE_DIR}) list(APPEND LIBRARY_PATHS ${CMAKE_LIBRARY_PATH}) # Start the project project(alarm_handler VERSION ${VERSION_STRING} LANGUAGES CXX) # Build options option(ENABLE_CLANG "Enable clang code and layout analysis" OFF) option(BUILD_TESTS "Build tests" OFF) # arch install definitions include(GNUInstallDirs) message(STATUS "Searching for libraries...") # Variable to contain a list of all the libs we depend on set(AH_LIBRARIES) # allow pkg-config to search the CMAKE_PREFIX_PATH set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON) list(APPEND CMAKE_PREFIX_PATH "/usr") # Find Dependencies ----------------------------------- # Find tango if it has not already been found. Returns an interface library # called TangoInterfaceLibrary set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake") find_package(Tango) set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) find_package(Boost 1.65.0 COMPONENTS thread) # Code Analysis ----------------------------------- if(ENABLE_CLANG) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # To find clang, find_program will search your PATH environment variable. # Ensure if you have a non-standard clang install, that it has been added # to your path. find_program(CLANG_TIDY_EXE NAMES "clang-tidy" DOC "Path to clang-tidy executable") if(NOT CLANG_TIDY_EXE) message(STATUS "clang-tidy not found.") else(NOT CLANG_TIDY_EXE) message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}") set(DO_CLANG_TIDY "${CLANG_TIDY_EXE}") endif(NOT CLANG_TIDY_EXE) endif(ENABLE_CLANG) # Source ----------------------------------- add_subdirectory(src) # Build Targets ----------------------------------- # Executable -------- add_executable(alarm_handler ${SRC_FILES}) target_link_libraries(alarm_handler PRIVATE TangoInterfaceLibrary ${Boost_LIBRARIES} ) target_include_directories(alarm_handler PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src> ${INCLUDE_PATHS} "${PROJECT_BINARY_DIR}" ${Boost_INCLUDE_DIRS}) if(NOT (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) set_target_properties(alarm_handler PROPERTIES OUTPUT_NAME ${AH_NAME} LINK_FLAGS "-Wl,--no-undefined" CXX_STANDARD 17) else() set_target_properties(alarm_handler PROPERTIES OUTPUT_NAME ${AH_NAME} LINK_FLAGS "" CXX_STANDARD 17) endif() if(DO_CLANG_TIDY) set_target_properties(alarm_handler PROPERTIES CXX_CLANG_TIDY ${DO_CLANG_TIDY}) endif(DO_CLANG_TIDY) target_compile_options(alarm_handler PRIVATE "$<$<CONFIG:DEBUG>:-g>") # Install Config ----------------------------------- install( TARGETS alarm_handler RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) message(STATUS "Configured alarm-handler project") # Tests ----------------------------------- if(BUILD_TESTS) add_subdirectory(test) endif(BUILD_TESTS)