# basec++ **Repository Path**: xiaowushengji/basec ## Basic Information - **Project Name**: basec++ - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-23 - **Last Updated**: 2025-10-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # basec++ 下面介绍在 Mac 上使用 CLion 开发基于 Crow C++ Web 框架的步骤: 1. 环境准备 安装必要的依赖 bash 复制 # 安装 Homebrew(如果尚未安装) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 安装依赖 brew install cmake brew install boost 2. 创建 CLion 项目 新建项目 打开 CLion → New Project 选择 C++ Executable 设置项目名称和路径 3. 配置 CMakeLists.txt cmake 复制 cmake_minimum_required(VERSION 3.20) project(MyCrowWebApp) set(CMAKE_CXX_STANDARD 17) # 查找 Boost 库 find_package(Boost REQUIRED COMPONENTS system) # 包含目录 include_directories(${CMAKE_SOURCE_DIR}/include) # 添加可执行文件 add_executable(MyCrowWebApp main.cpp) # 链接库 target_link_libraries(MyCrowWebApp ${Boost_LIBRARIES} pthread ) 4. 集成 Crow 框架 方法一:作为子模块(推荐) bash 复制 # 在项目根目录执行 git submodule add https://github.com/CrowCpp/Crow.git crow git submodule add https://github.com/blackberry/Boost.git boost 更新 CMakeLists.txt: cmake 复制 # 添加 Crow 子目录 add_subdirectory(crow) # 修改链接库 target_link_libraries(MyCrowWebApp Crow::Crow ${Boost_LIBRARIES} pthread ) 方法二:直接包含头文件 下载 crow.h 到项目目录: bash 复制 mkdir -p include curl -o include/crow.h https://raw.githubusercontent.com/CrowCpp/Crow/master/include/crow.h 5. 编写示例代码 创建 main.cpp: cpp 下载 复制 运行 #include "crow.h" int main() { crow::SimpleApp app; // 定义路由 CROW_ROUTE(app, "/") ([](){ return "Hello, World!"; }); CROW_ROUTE(app, "/hello/") ([](const std::string& name){ crow::json::wvalue response; response["message"] = "Hello, " + name + "!"; response["timestamp"] = time(nullptr); return response; }); CROW_ROUTE(app, "/users").methods("POST"_method) ([](const crow::request& req){ auto body = crow::json::load(req.body); if (!body) return crow::response(400); // 处理用户数据 crow::json::wvalue response; response["status"] = "success"; response["user_id"] = 123; return crow::response(response); }); // 启动服务器,监听 8080 端口 app.port(8080).multithreaded().run(); return 0; } 6. 项目结构 复制 MyCrowWebApp/ ├── CMakeLists.txt ├── main.cpp ├── include/ │ └── crow.h # 如果选择方法二 └── crow/ # 如果选择方法一 └── (crow源码) 7. 构建和运行 在 CLion 中: 点击右上角的运行按钮 或使用快捷键 ⌃R 命令行测试: bash 复制 # 测试 GET 请求 curl http://localhost:8080/ curl http://localhost:8080/hello/John # 测试 POST 请求 curl -X POST -H "Content-Type: application/json" \ -d '{"name":"John","email":"john@example.com"}' \ http://localhost:8080/users 8. 调试配置 在 CLion 中配置调试: 点击运行配置下拉菜单 选择 "Edit Configurations" 确保目标可执行文件正确 可以添加程序参数 9. 高级配置 启用 SSL 支持 cpp 下载 复制 运行 app.port(443).ssl_file("cert.pem", "key.pem").run(); 中间件示例 cpp 下载 复制 运行 // 添加日志中间件 app.loglevel(crow::LogLevel::Info); // 自定义中间件 struct ExampleMiddleware { void before_handle(crow::request& req, crow::response& res) { // 请求前处理 } void after_handle(crow::request& req, crow::response& res) { // 请求后处理 } }; 10. 常见问题解决 编译错误 确保 Boost 库正确安装和链接 检查 C++ 标准设置(Crow 需要 C++14 或更高) 端口占用 cpp 下载 复制 运行 // 更改端口 app.port(9090).run(); 多线程配置 cpp 下载 复制 运行 // 启用多线程(默认) app.multithreaded().run(); // 单线程模式 app.run(); git submodule update --init --recursive ```text 1.添加子模块 为当前工程添加submodule,命令如下: git submodule add 仓库地址 路径 其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。 注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone) 命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件,其中记录了子模块的信息。添加完成以后,再将子模块所在的文件夹添加到工程中即可。 2.下载的工程带有submodule 当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令: git submodule init git submodule update 或者是执行以下命令(该命令效果等同于上面两个命令): git submodule update --init --recursive 即可将子模块内容下载下来后工程才不会缺少相应的文件。 3.更新submodule的URL 1.更新.gitsubmodule中对应submodule的条目URL 2.更新 .git/config 中对应submodule的条目的URL 3.执行 git submodule sync 4.删除子模块 # 逆初始化模块,其中{MOD_NAME}为模块目录,执行后可发现模块目录被清空 git submodule deinit {MOD_NAME} # 删除.gitmodules中记录的模块信息(--cached选项清除.git/modules中的缓存) git rm --cached {MOD_NAME} # 提交更改到代码库,可观察到'.gitmodules'内容发生变更 git commit -am "Remove a submodule." ``` ```text 1. 安装 Git 首先,确保你的系统上安装了 Git。你可以从 Git 官网 下载并安装 Git。 2. 下载 vcpkg 打开命令提示符(CMD)或 PowerShell,然后使用 Git 克隆 vcpkg 的仓库到你的机器上。你可以选择一个合适的目录来存放 vcpkg。例如: bash Copy Code git clone https://github.com/microsoft/vcpkg.git 这将在当前目录下创建一个名为 vcpkg 的文件夹。 3. 配置 vcpkg 进入 vcpkg 目录: bash Copy Code cd vcpkg 然后,运行 bootstrap-vcpkg 脚本来安装或更新 vcpkg: bash Copy Code .\bootstrap-vcpkg.bat 4. 配置环境变量(可选) 为了方便使用,你可以将 vcpkg 的路径添加到系统的 PATH 环境变量中。这可以通过修改系统属性或使用命令行完成: bash Copy Code # 使用 PowerShell (需要管理员权限) [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\path\to\vcpkg", [System.EnvironmentVariableTarget]::Machine) 替换 C:\path\to\vcpkg 为你的 vcpkg 实际路径。如果你使用的是 CMD,可以使用: G:\project\c++\vcpkg\vcpkg.exe cmd Copy Code setx PATH "%PATH%;G:\project\c++\vcpk" 5. 使用 vcpkg 现在,你可以使用 vcpkg 来安装库了。例如,要安装 Boost 库,你可以使用: bash Copy Code .\vcpkg install boost:x64-windows 6. 集成到 Visual Studio(可选) 如果你使用 Visual Studio,可以配置 vcpkg 以与 Visual Studio 集成,这样可以直接从 Visual Studio 中管理库。要启用此功能,请在 PowerShell 中运行: bash Copy Code .\vcpkg integrate install 这将在 Visual Studio 中添加一个菜单项,允许你直接从 IDE 中管理库。 注意事项: 确保你的网络连接稳定,因为下载库可能需要一些时间。 根据你的需求选择合适的库版本和平台(如 x86 或 x64)。 如果在安装过程中遇到权限问题,尝试以管理员身份运行命令提示符或 PowerShell。 通过以上步骤,你应该能够在 Windows 系统上成功安装并使用 vcpkg ``` .\vcpkg install asio:x64-windows .\vcpkg install SDL2:x64-64 # 临时生效 export PATH="$PATH:/path/to/your/vcpkg" # 永久生效(bash用户) echo 'export PATH="$PATH:/Users/dongguijun/vcpkg"' >> ~/.bash_profile # 永久生效(zsh用户) echo 'export PATH="$PATH:/Users/dongguijun/vcpkg"' >> ~/.zshrc source ~/.zshrc --toolchain=/Users/dongguijun/vcpkg/scripts/buildsystems/vcpkg.cmake /Users/dongguijun/vcpkg ./vcpkg install sdl2-image find_package(SDL2_image CONFIG REQUIRED) $ $,SDL2::SDL2,SDL2::SDL2-static> $,SDL2_image::SDL2_image,SDL2_image::SDL2_image-static> $,SDL2_ttf::SDL2_ttf,SDL2_ttf::SDL2_ttf-static> $,SDL2_mixer::SDL2_mixer,SDL2_mixer::SDL2_mixer-static> ./vcpkg install sdl2-ttf find_package(SDL2_ttf CONFIG REQUIRED) $ $,SDL2::SDL2,SDL2::SDL2-static> $,SDL2_image::SDL2_image,SDL2_image::SDL2_image-static> $,SDL2_ttf::SDL2_ttf,SDL2_ttf::SDL2_ttf-static> $,SDL2_mixer::SDL2_mixer,SDL2_mixer::SDL2_mixer-static> ./vcpkg install sdl2-mixer find_package(SDL2_mixer CONFIG REQUIRED) $ $,SDL2::SDL2,SDL2::SDL2-static> $,SDL2_image::SDL2_image,SDL2_image::SDL2_image-static> $,SDL2_ttf::SDL2_ttf,SDL2_ttf::SDL2_ttf-static> $,SDL2_mixer::SDL2_mixer,SDL2_mixer::SDL2_mixer-static>