project-euler/CMakeLists.txt
erick-alcachofa 32fe4db4f2
BigInt implementation
Signed-off-by: erick-alcachofa <erick@artichoke.dev>
2025-09-09 03:29:44 +00:00

108 lines
2.2 KiB
CMake

cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(
ProjectEuler
LANGUAGES CXX
)
find_package(GTest CONFIG REQUIRED)
file(GLOB LIB_SRCS "common/**.cpp")
add_library(
common STATIC
${LIB_SRCS}
)
target_include_directories(
common PUBLIC
common/
)
file(GLOB LIB_TESTS "common-tests/src/**.cpp")
foreach(FILE IN LISTS LIB_TESTS)
cmake_path(GET FILE STEM TEST)
add_executable("common-tests-${TEST}" "${FILE}")
target_link_libraries(
"common-tests-${TEST}" PRIVATE
common
GTest::gtest_main
)
set_target_properties(
"common-tests-${TEST}" PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/common-tests/bin"
RUNTIME_OUTPUT_NAME "test-${TEST}"
SUFFIX ""
)
endforeach()
file(GLOB SOURCES "problem-*/")
foreach(FILE IN LISTS SOURCES)
cmake_path(GET FILE STEM PROBLEM)
file(READ "${FILE}/data/input" input)
file(READ "${FILE}/data/example" example)
set(TEST_PATH "${CMAKE_CURRENT_BINARY_DIR}/${PROBLEM}/src/test.cpp")
set(SOLUTION_PATH "${CMAKE_CURRENT_BINARY_DIR}/${PROBLEM}/src/solution.cpp")
configure_file(
"${FILE}/src/test.cpp"
"${TEST_PATH}" ESCAPE_QUOTES
)
configure_file(
"${FILE}/src/solution.cpp"
"${SOLUTION_PATH}" ESCAPE_QUOTES
)
add_executable("${PROBLEM}" "${SOLUTION_PATH}")
add_executable("test-${PROBLEM}" "${TEST_PATH}")
target_link_libraries(
"${PROBLEM}" PRIVATE
common
)
target_link_libraries(
"test-${PROBLEM}" PRIVATE
common
GTest::gtest_main
)
target_include_directories(
"${PROBLEM}" PRIVATE
"${FILE}/src"
)
target_include_directories(
"test-${PROBLEM}" PRIVATE
"${FILE}/src"
)
set_target_properties(
"${PROBLEM}" PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${FILE}/bin"
RUNTIME_OUTPUT_NAME "solution"
SUFFIX ""
)
set_target_properties(
"test-${PROBLEM}" PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${FILE}/bin"
RUNTIME_OUTPUT_NAME "test"
SUFFIX ""
)
endforeach()