1cmake_minimum_required(VERSION 3.5) 2project(webserver CXX) 3 4include(CheckIncludeFileCXX) 5 6check_include_file_cxx(any HAS_ANY) 7check_include_file_cxx(string_view HAS_STRING_VIEW) 8check_include_file_cxx(coroutine HAS_COROUTINE) 9if (NOT "${CMAKE_CXX_STANDARD}" STREQUAL "") 10 # Do nothing 11elseif (HAS_ANY AND HAS_STRING_VIEW AND HAS_COROUTINE) 12 set(CMAKE_CXX_STANDARD 20) 13elseif (HAS_ANY AND HAS_STRING_VIEW) 14 set(CMAKE_CXX_STANDARD 17) 15else () 16 set(CMAKE_CXX_STANDARD 14) 17endif () 18 19set(CMAKE_CXX_STANDARD_REQUIRED ON) 20set(CMAKE_CXX_EXTENSIONS OFF) 21 22add_executable(${PROJECT_NAME} main.cpp "controllers/download.cpp" "dto/info.cpp" "untils/tcpserver.cpp") 23 24# ############################################################################## 25# If you include the drogon source code locally in your project, use this method 26# to add drogon 27# add_subdirectory(drogon) 28# target_link_libraries(${PROJECT_NAME} PRIVATE drogon) 29# 30# and comment out the following lines 31find_package(Drogon CONFIG REQUIRED) 32target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon) 33find_package(Boost REQUIRED) 34target_link_libraries(${PROJECT_NAME} PRIVATE Boost::boost) 35find_package(OpenSSL REQUIRED) 36target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::SSL) 37# ############################################################################## 38 39if (CMAKE_CXX_STANDARD LESS 17) 40 # With C++14, use boost to support any, string_view and filesystem 41 message(STATUS "use c++14") 42 find_package(Boost 1.61.0 REQUIRED) 43 target_link_libraries(${PROJECT_NAME} PUBLIC Boost::boost) 44elseif (CMAKE_CXX_STANDARD LESS 20) 45 message(STATUS "use c++17") 46else () 47 message(STATUS "use c++20") 48endif () 49 50aux_source_directory(controllers CTL_SRC) 51 52target_include_directories(${PROJECT_NAME} 53 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) 54target_sources(${PROJECT_NAME} 55 PRIVATE 56 ${SRC_DIR} 57 ${CTL_SRC}) 58# ############################################################################## 59# uncomment the following line for dynamically loading views 60# set_property(TARGET ${PROJECT_NAME} PROPERTY ENABLE_EXPORTS ON) 61 62# ############################################################################## 63