108 lines
2.2 KiB
CMake
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()
|
|
|