| cmake_minimum_required(VERSION 3.20) |
| project(ai_dev_project VERSION 0.1.0 LANGUAGES CXX) |
|
|
| # C++23 standard |
| set(CMAKE_CXX_STANDARD 23) |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| set(CMAKE_CXX_EXTENSIONS OFF) |
|
|
| # Build type default |
| if(NOT CMAKE_BUILD_TYPE) |
| set(CMAKE_BUILD_TYPE Release) |
| endif() |
|
|
| # Compiler warnings |
| if(MSVC) |
| add_compile_options(/W4 /WX-) |
| else() |
| add_compile_options(-Wall -Wextra -Wpedantic -Wshadow -Wconversion -Wsign-conversion) |
| endif() |
|
|
| # Dependencies |
| find_package(Threads REQUIRED) |
|
|
| # Options |
| option(BUILD_TESTS "Build tests" ON) |
| option(BUILD_SHARED_LIBS "Build shared libraries" OFF) |
|
|
| # Include directories |
| include_directories(${CMAKE_SOURCE_DIR}/include) |
|
|
| # Source files |
| file(GLOB_RECURSE SOURCES "src/*.cpp") |
|
|
| # Library |
| add_library(${PROJECT_NAME} ${SOURCES}) |
| target_link_libraries(${PROJECT_NAME} Threads::Threads) |
|
|
| # Executable |
| add_executable(${PROJECT_NAME}_app src/main.cpp) |
| target_link_libraries(${PROJECT_NAME}_app ${PROJECT_NAME}) |
|
|
| # Tests |
| if(BUILD_TESTS) |
| enable_testing() |
| add_subdirectory(tests) |
| endif() |
|
|
| # Install |
| install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_app |
| ARCHIVE DESTINATION lib |
| RUNTIME DESTINATION bin |
| LIBRARY DESTINATION lib |
| ) |
| install(DIRECTORY include/ DESTINATION include) |
|
|