Win系统Vscode+CoNan+Cmake实现调试与构建

是一个开源的C/C++ 包管理器,类似与python 的 pip,实际使用中支持conanfile.txt(方便便捷简单) 与 conanfile.py (强大自定义特殊要求)

本次介绍的是使用 conanfile.txt + Cmake + 自建编译工具实现编译与调试

首先安装conan

pip install conan==2.22.2

自定义工作路径(解决C盘压力)

bash 复制代码
CONAN_HOME
CONAN_USER_HOME
这2个设置到用户变量或者系统变量(如D:/conan)可以实现自定义安装!

然后进行初始化配置(这里使用的是MingW64 --- 网上教程少且看且珍惜)

bash 复制代码
conan config home
查看配置结果

conan profile detect
生成配置文件

conan profile show
查看当前配置信息

conan profile list # 获取所有的配置文件名
conan profile path default # default:配置文件名	

生成默认后不需要去管了我们按照自己的环境进行改写

分别创建

bash 复制代码
conan profile detect --name MingW64_Debug
conan profile detect --name MingW64_Release

假如:MingW64_Release 如下配置

bash 复制代码
[settings]
os=Windows
arch=x86_64
compiler=gcc
compiler.version=14
compiler.libcxx=libstdc++11
compiler.threads=posix
compiler.exception=seh      
build_type=Release

[buildenv]
PATH+=(path)D:/MingW64/bin
CC=D:/MingW64/bin/gcc.exe
CXX=D:/MingW64/bin/g++.exe

[options]
boost/*:without_stacktrace=True

[conf]
tools.build:compiler_executables={"c": "D:/MingW64/bin/gcc.exe", "cpp": "D:/MingW64/bin/g++.exe","gdb":"D:/MingW64/bin/gdb.exe"}

配置后 可以创建 如 Boost 的工程(conanfile.txt)

bash 复制代码
[requires]
boost/1.89.0

[generators]
CMakeDeps
CMakeToolchain

[layout]
cmake_layout

且介所有的工程都需要写

layout

cmake_layout

然后继续写 CmakeLists.txt

bash 复制代码
cmake_minimum_required(VERSION 3.15)
project(MyApp)# 设置输出文件名 不要改

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) # 设置输出路径 不要改

set(INCLUDE "${PROJECT_SOURCE_DIR}/Include")
include_directories(${INCLUDE})
file(GLOB SRC "${PROJECT_SOURCE_DIR}/Src/*.cpp")

find_package(Boost REQUIRED NO_MODULE) # 其余的库也可以在这里添加

add_executable(${PROJECT_NAME} ${SRC} main.cpp)

target_link_libraries(${PROJECT_NAME} Boost::boost) # 对象引用

include(${CMAKE_BINARY_DIR}/generators/conan_toolchain.cmake OPTIONAL
       RESULT_VARIABLE CONAN_TOOLCHAIN_LOADED)
if(NOT CONAN_TOOLCHAIN_LOADED)
    message(WARNING "Conan toolchain not found! Using system defaults.")
endif()

target_compile_options(${PROJECT_NAME} PRIVATE
    $<$<CONFIG:Debug>:-g -O0>
    $<$<CONFIG:Release>:-O2 -DNDEBUG>
)

if(MINGW)
    target_link_options(${PROJECT_NAME} PRIVATE
        -static
        -static-libgcc
        -static-libstdc++
    )
endif()

最后就是实际的main.cpp

cpp 复制代码
#include <boost/version.hpp>
#include <boost/stacktrace.hpp>
#include <iostream>
#include <cstdlib>  // for std::abort
#include <exception>
#include "test.h"

// 全局异常处理器:在程序崩溃时自动打印调用栈
void my_terminate_handler() {
    std::cerr << "Unhandled exception detected!\n";
    std::cerr << "Stack trace:\n" << boost::stacktrace::stacktrace() << std::endl;
    std::abort(); // 确保退出并触发调试器(如 GDB)
}

void function_c() {
    // 模拟一个错误:抛出异常或直接打印栈
    std::cout << "Current stack trace:\n"
              << boost::stacktrace::stacktrace() << std::endl;

    // 或者故意抛出未捕获异常来测试 terminate handler
    // throw std::runtime_error("Something went wrong in function_c!");
}

void function_b() {
    function_c();
}

void function_a() {
    function_b();
}

int main() {
    std::cout << test_add(15,77) << std::endl;
    // 注册全局异常处理(可选但推荐用于调试)
    std::set_terminate(my_terminate_handler);

    std::cout << "Boost version: " << BOOST_LIB_VERSION << std::endl;
    std::cout << "Printing call stack from main:\n";

    function_a();

    std::cout << "\nPress any key to continue...";
    std::cin.get(); // 更安全的"暂停",避免 system("pause") 的兼容性问题
    return 0;
}

使用自己的建立程序测试

然后就是调试测试 需要先 执行命令

bash 复制代码
conan_build 1

然后就是Cmake配置 框图 选为 debug模式

让在main.cpp界面 按F5即可调用 出调试界面

这个项目完美解决了自己装常用包的麻烦!让C++实现python一样的使用体验,希望CoNan 也来越好最后拜托依赖Cmake,本身去与gdb,lldb进行调试接口设计!

如果F5失败参考:Target Debugging and Launching --- CMake Tools 1.4.0 documentation

也就是 .vscode --> launch.json

bash 复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            // Resolved by CMake Tools:
            "program": "${command:cmake.launchTargetPath}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [
                {
                    // add the directory where our target was built to the PATHs
                    // it gets resolved by CMake Tools:
                    "name": "PATH",
                    "value": "$PATH:${command:cmake.launchTargetDirectory}"
                },
                {
                    "name": "OTHER_VALUE",
                    "value": "Something something"
                }
            ],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

文件下载:密码:7n6d

相关推荐
lzh2004091930 分钟前
【C++STL】List详解
开发语言·c++
luoyayun36136 分钟前
Qt/C++ 线程池TaskPool与 Worker 框架实践
c++·qt·线程池·taskpool
bing_15843 分钟前
Spring Boot 项目中判断集合(List、Set、Map)不能为空且不为 null的注解使用
spring boot·后端·list
喵个咪1 小时前
Go 接口与代码复用:替代继承的设计哲学
后端·go
喵个咪1 小时前
ASIO 定时器完全指南:类型解析、API 用法与实战示例
c++·后端
星轨初途1 小时前
数据结构排序算法详解(2)——选择排序(附动图)
c语言·数据结构·经验分享·笔记·b树·算法·排序算法
合作小小程序员小小店1 小时前
游戏开发,桌面%小游戏,俄罗斯方块%demo,基于vs2022,c语言,背景音乐,easyX,无数据库,
c语言·开发语言
IT_陈寒1 小时前
Vite 3.0 重磅升级:5个你必须掌握的优化技巧和实战应用
前端·人工智能·后端
gadiaola2 小时前
【计算机网络面试篇】HTTP
java·后端·网络协议·计算机网络·http·面试