windows 下 VSCode 中 CMake 未定义 CMAKE_BUILD_TYPE

解决Windows下CMakewithVS编译器不定义CMAKE_BUILD_TYPE的问题
文章讨论了CMakeTools1.4.0在Windows下使用VisualStudio编译器时,CMAKE_BUILD_TYPE未被定义的问题。解决方案是在VSCode中设置CMake配置,通过文件>首选项>设置>启用多配置生成器并配置CMAKE_BUILD_TYPE。

出处: CMake Tools 1.4.0 doesn't define CMAKE_BUILD_TYPE in a project's build directory's CMakeCache.txt · Issue #1298 · microsoft/vscode-cmake-tools · GitHub

Ninja generator defines CMAKE_BUILD_TYPEVisual Studio XXXX does not.

windows 下cmake 使用 Visual Studio  编译器时不定义 CMAKE_BUILD_TYPE 的解决方法

VS Code为Cmake添加了一个设置,它在多配置生成器(默认生成器)上设置构建类型。

打开 [ 文件>首选项>设置并搜索“CMAKE_”或“CMAKE_BUILD_TYPE” ] ,勾选第一个出现的选项。

在VPP(Vector Packet Processing)框架中,`add_vpp_plugin` 是一个 **自定义的CMake宏**,专门用于简化VPP插件的构建和集成。它的核心作用是为插件提供标准化的编译、链接和安装规则,确保插件能与VPP主程序正确交互。以下是详细解析: --- ### **1. `add_vpp_plugin` 的核心功能** #### **(1) 自动处理插件依赖** - **链接VPP核心库**:自动关联 `libvppinfra`、`libvlib`、`libvnet` 等VPP基础库。 - **依赖头文件**:包含VPP的公共头文件路径(如 `/usr/include/vpp_plugins`)。 #### **(2) 标准化插件构建** - **生成动态库**:将插件编译为 `.so` 文件(如 `url_filter_plugin.so`)。 - **符号导出控制**:确保插件的API符号(如 `url_filter_http_match`)可见性正确。 #### **(3) 安装部署** - **目标路径**:默认安装到 `/usr/lib/vpp_plugins/`,供VPP运行时加载。 - **版本兼容性检查**:可选支持版本号校验(与VPP主程序匹配)。 --- ### **2. 典型CMakeList.txt中的用法** ```cmake # 示例:定义一个名为 "url_filter" 的插件 add_vpp_plugin( url_filter # 插件名称(生成 liburl_filter_plugin.so) SOURCES # 必选项:指定源码文件 url_filter.c http_parser.c INCLUDES # 可选项:附加头文件路径 ${CMAKE_CURRENT_SOURCE_DIR}/include LINK_LIBRARIES # 可选项:额外依赖库 -lpcre # 例如链接PCRE正则库 INSTALL # 可选项:是否安装(默认为TRUE) ) ``` --- ### **3. 内部实现关键点** #### **(1) 宏定义源码位置** - 通常定义在VPP的CMake工具文件中(如 `cmake/vpp_plugin.cmake`)。 - **核心逻辑**:封装了 `add_library` + `target_link_libraries` + `install` 的复合操作。 #### **(2) 特殊处理** - **符号隐藏**:通过编译器标志(如 `-fvisibility=hidden`)控制非API符号的导出。 - **调试支持**:自动添加调试符号(如 `-g`)和优化级别(如 `-O2`)。 --- ### **4. 常见问题与调试** #### **(1) 符号未定义错误(如问题中的 `url_filter_http_match`)** - **原因**:可能未在源码中正确定义 `VLIB_PLUGIN_REGISTER` 或导出符号。 - **解决**:检查插件是否包含以下关键代码: ```c VLIB_PLUGIN_REGISTER() = { .version = VPP_BUILD_VER, .description = "URL Filter Plugin", }; ``` #### **(2) 版本冲突** - **验证方法**:检查 `CMakeList.txt` 中是否指定了 `VPP_API_VERSION`。 --- ### **5. 对比原生CMake指令** | **功能** | `add_vpp_plugin` | 原生CMake (`add_library`) | |------------------------|------------------------------------------|-----------------------------------| | **依赖管理** | 自动链接VPP核心库 | 需手动指定 `target_link_libraries` | | **安装路径** | 固定到VPP插件目录 | 需手动定义 `install(TARGETS...)` | | **符号导出** | 自动处理VPP插件符号可见性 | 需手动配置编译器标志 | | **调试支持** | 内置VPP标准调试选项 | 需手动添加编译参数 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值