AdventOfCode2024/CMakeLists.txt

58 lines
1.6 KiB
CMake

cmake_minimum_required(VERSION 3.20 FATAL_ERROR)
Include(FetchContent)
set(CMAKE_CXX_STANDARD 23) # latest c++
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# prepare out unit test framework
FetchContent_Declare(
Catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG v3.4.0 # or a later release
)
FetchContent_MakeAvailable(Catch2)
# Versioning
project ("AdventOfCode2024" VERSION 0.0.1 DESCRIPTION "" LANGUAGES CXX)
# ---
# Grab source files
file(GLOB_RECURSE AdventOfCode2024Sources
"include/*.h"
"include/*.hpp"
"src/*.c"
"src/*.cpp"
)
file(GLOB_RECURSE AdventOfCode2024Tests
"tests/include/*.h"
"tests/include/*.hpp"
"tests/src/*.c"
"tests/src/*.cpp"
)
# Project setup
set(output_target AdventOfCode2024)
# This is split in 2 because catch2 generates its own main() functions
# and we don't want to recompile everything twice, so we reuse the lib object.
# lib
# / \
# main exe catch2
# Library to contain logic/code
add_library(${output_target}-lib ${AdventOfCode2024Sources})
target_include_directories(${output_target}-lib PUBLIC "include")
# Executable that links to the lib containing the code
add_executable(${output_target} "AdventOfCode2024.cpp")
target_link_libraries(${output_target} PRIVATE ${output_target}-lib)
# Catch2 linked with the lib.
add_executable(${output_target}-tests ${AdventOfCode2024Tests})
target_include_directories(${output_target}-tests PRIVATE "tests/include")
target_link_libraries(${output_target}-tests PRIVATE
${output_target}-lib
Catch2::Catch2WithMain
)