Files
mock-uil-2025/CMakeLists.txt
2025-11-23 11:53:24 -06:00

74 lines
2.2 KiB
CMake

cmake_minimum_required(VERSION 3.20)
# -----------------------------
# Project setup
# -----------------------------
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
project(mock-uil LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_BUILD_TYPE Release)
# -----------------------------
# Dependencies
# -----------------------------
add_subdirectory(external/fmt)
add_subdirectory(external/spdlog)
set(COMMON_LIBS fmt spdlog)
# -----------------------------
# External includes
# -----------------------------
set(EXTERNAL_INCLUDES
${CMAKE_CURRENT_SOURCE_DIR}/external/fmt/include
${CMAKE_CURRENT_SOURCE_DIR}/external/spdlog/include
)
# -----------------------------
# Collect all include dirs under src/
# -----------------------------
file(GLOB_RECURSE SRC_SUBDIRS LIST_DIRECTORIES true "${CMAKE_CURRENT_SOURCE_DIR}/src/*")
set(SRC_INCLUDES "")
foreach(dir ${SRC_SUBDIRS})
if(IS_DIRECTORY ${dir})
list(APPEND SRC_INCLUDES ${dir})
endif()
endforeach()
# -----------------------------
# Detect all main-solution-N files
# -----------------------------
file(GLOB SOLUTION_MAINS "${CMAKE_CURRENT_SOURCE_DIR}/src/main-solution-*.cpp")
# -----------------------------
# Detect all other .cpp files (common utilities)
# -----------------------------
file(GLOB_RECURSE ALL_CPP "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
list(REMOVE_ITEM ALL_CPP ${SOLUTION_MAINS}) # remove all mains
# -----------------------------
# Create an executable for each main-solution-N
# -----------------------------
foreach(MAIN_FILE ${SOLUTION_MAINS})
get_filename_component(MAIN_NAME ${MAIN_FILE} NAME_WE)
set(EXE_NAME "${PROJECT_NAME}-${MAIN_NAME}")
# Each executable = its main + all common cpp files
add_executable(${EXE_NAME} ${MAIN_FILE} ${ALL_CPP})
target_link_libraries(${EXE_NAME} PRIVATE ${COMMON_LIBS})
target_include_directories(${EXE_NAME} PRIVATE ${EXTERNAL_INCLUDES} ${SRC_INCLUDES})
endforeach()
# -----------------------------
# Clang warnings
# -----------------------------
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic -Wconversion)
endif()