//this file is generated by program(drogon_ctl) automatically,don't modify it! #include "cmake.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace drogon; std::string cmake::genText(const DrTemplateData& cmake_view_data) { drogon::OStringStream cmake_tmp_stream; std::string layoutName{""}; cmake_tmp_stream << "cmake_minimum_required(VERSION 3.5)\n"; cmake_tmp_stream << "project("; { auto & val=cmake_view_data["ProjectName"]; if(val.type()==typeid(const char *)){ cmake_tmp_stream<<*any_cast(&val); }else if(val.type()==typeid(std::string)||val.type()==typeid(const std::string)){ cmake_tmp_stream<<*any_cast(&val); } } cmake_tmp_stream << " CXX)\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "include(CheckIncludeFileCXX)\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "check_include_file_cxx(any HAS_ANY)\n"; cmake_tmp_stream << "check_include_file_cxx(string_view HAS_STRING_VIEW)\n"; cmake_tmp_stream << "check_include_file_cxx(coroutine HAS_COROUTINE)\n"; cmake_tmp_stream << "if (NOT \"${CMAKE_CXX_STANDARD}\" STREQUAL \"\")\n"; cmake_tmp_stream << " # Do nothing\n"; cmake_tmp_stream << "elseif (HAS_ANY AND HAS_STRING_VIEW AND HAS_COROUTINE)\n"; cmake_tmp_stream << " set(CMAKE_CXX_STANDARD 20)\n"; cmake_tmp_stream << "elseif (HAS_ANY AND HAS_STRING_VIEW)\n"; cmake_tmp_stream << " set(CMAKE_CXX_STANDARD 17)\n"; cmake_tmp_stream << "else ()\n"; cmake_tmp_stream << " set(CMAKE_CXX_STANDARD 14)\n"; cmake_tmp_stream << "endif ()\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "set(CMAKE_CXX_STANDARD_REQUIRED ON)\n"; cmake_tmp_stream << "set(CMAKE_CXX_EXTENSIONS OFF)\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "add_executable(${PROJECT_NAME} main.cc)\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "# ##############################################################################\n"; cmake_tmp_stream << "# If you include the drogon source code locally in your project, use this method\n"; cmake_tmp_stream << "# to add drogon \n"; cmake_tmp_stream << "# add_subdirectory(drogon) \n"; cmake_tmp_stream << "# target_link_libraries(${PROJECT_NAME} PRIVATE drogon)\n"; cmake_tmp_stream << "#\n"; cmake_tmp_stream << "# and comment out the following lines\n"; cmake_tmp_stream << "find_package(Drogon CONFIG REQUIRED)\n"; cmake_tmp_stream << "target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon)\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "# ##############################################################################\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "if (CMAKE_CXX_STANDARD LESS 17)\n"; cmake_tmp_stream << " # With C++14, use boost to support any, string_view and filesystem\n"; cmake_tmp_stream << " message(STATUS \"use c++14\")\n"; cmake_tmp_stream << " find_package(Boost 1.61.0 REQUIRED)\n"; cmake_tmp_stream << " target_link_libraries(${PROJECT_NAME} PUBLIC Boost::boost)\n"; cmake_tmp_stream << "elseif (CMAKE_CXX_STANDARD LESS 20)\n"; cmake_tmp_stream << " message(STATUS \"use c++17\")\n"; cmake_tmp_stream << "else ()\n"; cmake_tmp_stream << " message(STATUS \"use c++20\")\n"; cmake_tmp_stream << "endif ()\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "aux_source_directory(controllers CTL_SRC)\n"; cmake_tmp_stream << "aux_source_directory(filters FILTER_SRC)\n"; cmake_tmp_stream << "aux_source_directory(plugins PLUGIN_SRC)\n"; cmake_tmp_stream << "aux_source_directory(models MODEL_SRC)\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "drogon_create_views(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/views\n"; cmake_tmp_stream << " ${CMAKE_CURRENT_BINARY_DIR})\n"; cmake_tmp_stream << "# use the following line to create views with namespaces.\n"; cmake_tmp_stream << "# drogon_create_views(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/views\n"; cmake_tmp_stream << "# ${CMAKE_CURRENT_BINARY_DIR} TRUE)\n"; cmake_tmp_stream << "# use the following line to create views with namespace CHANGE_ME prefixed\n"; cmake_tmp_stream << "# and path namespaces.\n"; cmake_tmp_stream << "# drogon_create_views(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/views\n"; cmake_tmp_stream << "# ${CMAKE_CURRENT_BINARY_DIR} TRUE CHANGE_ME)\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "target_include_directories(${PROJECT_NAME}\n"; cmake_tmp_stream << " PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}\n"; cmake_tmp_stream << " ${CMAKE_CURRENT_SOURCE_DIR}/models)\n"; cmake_tmp_stream << "target_sources(${PROJECT_NAME}\n"; cmake_tmp_stream << " PRIVATE\n"; cmake_tmp_stream << " ${SRC_DIR}\n"; cmake_tmp_stream << " ${CTL_SRC}\n"; cmake_tmp_stream << " ${FILTER_SRC}\n"; cmake_tmp_stream << " ${PLUGIN_SRC}\n"; cmake_tmp_stream << " ${MODEL_SRC})\n"; cmake_tmp_stream << "# ##############################################################################\n"; cmake_tmp_stream << "# uncomment the following line for dynamically loading views \n"; cmake_tmp_stream << "# set_property(TARGET ${PROJECT_NAME} PROPERTY ENABLE_EXPORTS ON)\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "# ##############################################################################\n"; cmake_tmp_stream<<"\n"; cmake_tmp_stream << "add_subdirectory(test)\n"; if(layoutName.empty()) { std::string ret{std::move(cmake_tmp_stream.str())}; return ret; }else { auto templ = DrTemplateBase::newTemplate(layoutName); if(!templ) return ""; HttpViewData data = cmake_view_data; auto str = std::move(cmake_tmp_stream.str()); if(!str.empty() && str[str.length()-1] == '\n') str.resize(str.length()-1); data[""] = std::move(str); return templ->genText(data); } }