cmake_minimum_required(VERSION 3.5) project(discordlistforbots CXX) include(CheckIncludeFileCXX) check_include_file_cxx(any HAS_ANY) check_include_file_cxx(string_view HAS_STRING_VIEW) if(HAS_ANY AND HAS_STRING_VIEW) set(CMAKE_CXX_STANDARD 17) else() set(CMAKE_CXX_STANDARD 14) endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) add_executable(${PROJECT_NAME} main.cc) # ############################################################################## # If you include the drogon source code locally in your project, use this method # to add drogon # add_subdirectory(drogon) # target_link_libraries(${PROJECT_NAME} PRIVATE drogon) # ############################################################################## find_package(Drogon CONFIG REQUIRED) target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon) if(CMAKE_CXX_STANDARD LESS 17) # With C++14, use boost to support any and string_view message(STATUS "use c++14") find_package(Boost 1.61.0 REQUIRED) target_include_directories(${PROJECT_NAME} PRIVATE ${Boost_INCLUDE_DIRS}) else() message(STATUS "use c++17") endif() aux_source_directory(controllers CTL_SRC) aux_source_directory(filters FILTER_SRC) aux_source_directory(plugins PLUGIN_SRC) aux_source_directory(models MODEL_SRC) drogon_create_views(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/views ${CMAKE_CURRENT_BINARY_DIR}) # use the following line to create views with namespaces. # drogon_create_views(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/views # ${CMAKE_CURRENT_BINARY_DIR} TRUE) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/models) target_sources(${PROJECT_NAME} PRIVATE ${SRC_DIR} ${CTL_SRC} ${FILTER_SRC} ${PLUGIN_SRC} ${MODEL_SRC}) # ############################################################################## # uncomment the following line for dynamically loading views # set_property(TARGET ${PROJECT_NAME} PROPERTY ENABLE_EXPORTS ON) function(staticinc dir) file(GLOB files "${dir}/*") foreach(file ${files}) get_filename_component(filename "${file}" NAME) message("${file}: ${filename}") configure_file("${file}" "./${filename}" COPYONLY) endforeach() endfunction() staticinc(static) staticinc(customstatic) find_package(PkgConfig REQUIRED) pkg_check_modules(format REQUIRED IMPORTED_TARGET fmt) target_link_libraries(${PROJECT_NAME} PUBLIC PkgConfig::format)