################################################################################### # # # NAME: CMakeLists.txt # # # # AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. # # WRITTEN BY: Michael Brockus. # # # # License: MIT # # # ################################################################################### cmake_minimum_required(VERSION 3.12) # Read root meson.build file and get project version from it set(ROOT_MESON_BUILD_FILE "meson.build") file(READ "${ROOT_MESON_BUILD_FILE}" ROOT_MESON_BUILD_CONTENT) string(REGEX MATCH " *version: '[.0-9]+'" UNITY_VERSION "${ROOT_MESON_BUILD_CONTENT}") if(NOT UNITY_VERSION) message(FATAL_ERROR "Cannot define version from meson build file") endif() string(REGEX REPLACE " *version: '([.0-9]+)'" "\\1" UNITY_VERSION "${UNITY_VERSION}") project(unity VERSION ${UNITY_VERSION} LANGUAGES C DESCRIPTION "C Unit testing framework." ) # Main target ------------------------------------------------------------------ add_library(${PROJECT_NAME} STATIC) add_library(${PROJECT_NAME}::framework ALIAS ${PROJECT_NAME}) # Includes --------------------------------------------------------------------- include(GNUInstallDirs) include(CMakePackageConfigHelpers) # Configuration ---------------------------------------------------------------- configure_file(cmake/templates/${PROJECT_NAME}_version.h.in ${PROJECT_NAME}_version.h @ONLY ) target_sources(${PROJECT_NAME} PRIVATE src/unity.c ) target_include_directories(${PROJECT_NAME} PUBLIC $ $ $ ) set(${PROJECT_NAME}_PUBLIC_HEADERS src/unity.h src/unity_internals.h ${CMAKE_CURRENT_BINARY_DIR}/unity_version.h ) set_target_properties(${PROJECT_NAME} PROPERTIES C_STANDARD 11 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF PUBLIC_HEADER "${${PROJECT_NAME}_PUBLIC_HEADERS}" EXPORT_NAME framework ) target_compile_options(${PROJECT_NAME} PRIVATE $<$:-Wcast-align -Wcast-qual -Wconversion -Wexit-time-destructors -Wglobal-constructors -Wmissing-noreturn -Wmissing-prototypes -Wno-missing-braces -Wold-style-cast -Wshadow -Wweak-vtables> $<$:-Waddress -Waggregate-return -Wformat-nonliteral -Wformat-security -Wformat -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wno-multichar -Wno-parentheses -Wno-type-limits -Wno-unused-parameter -Wunreachable-code -Wwrite-strings -Wpointer-arith> -Wall -Werror ) write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion ) ## Target installation install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME} COMPONENT library ) ## Target's cmake files: targets export install(EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME}:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} ) ## Target's cmake files: config and version config for find_package() install(FILES ${PROJECT_NAME}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME} )