58 lines
1.6 KiB
CMake
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
|
|
)
|