Files
c-template/CMakeLists.txt

61 lines
1.9 KiB
CMake

cmake_minimum_required(VERSION 3.30 FATAL_ERROR)
cmake_policy(VERSION 3.30)
project(c-template LANGUAGES C)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
option(BUILD_TESTS "Build tests" OFF)
option(BUILD_DOCS "Build documentation" OFF)
option(DISABLE_LOGGING "Disables all logging" OFF)
option(DO_NOT_INCREASE_VERSION "Disable custom target that automatically increases version" OFF)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(CheckCompileOptions)
include(FetchZlog)
include(FetchCargs)
if(BUILD_TESTS)
enable_testing()
include(FetchGoogleTest)
add_subdirectory(tests)
endif()
if(DISABLE_LOGGING)
message(STATUS "Disabling all logs")
add_compile_definitions("PLOG_DISABLE_LOGGING=1")
endif()
if(BUILD_DOCS)
message(STATUS "Building documentation")
add_subdirectory(docs)
endif()
add_executable(${PROJECT_NAME} src/main.c)
set_target_properties(
${PROJECT_NAME}
PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
if(NOT DO_NOT_INCREASE_VERSION)
add_custom_target(
run_versioning_script
COMMAND ${CMAKE_COMMAND} -E echo "$(date +%s)" > "${CMAKE_CURRENT_BINARY_DIR}/update_versioning_signal"
COMMAND ${PROJECT_SOURCE_DIR}/scripts/versioning.sh patch
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Running versioning script")
add_dependencies(${PROJECT_NAME} run_versioning_script)
endif()
execute_process(COMMAND ${PROJECT_SOURCE_DIR}/scripts/versioning.sh print WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE ${PROJECT_NAME}_VERSION)
message(STATUS "Building [${PROJECT_NAME}] version ${${PROJECT_NAME}_VERSION}")
target_compile_options(${PROJECT_NAME} PRIVATE "${COMPILE_FLAGS}")
target_link_options(${PROJECT_NAME} PRIVATE "${LINK_FLAGS}")
add_subdirectory(include)
add_subdirectory(src)