(Mac简洁版)在VSCode 中用CMake实现多文件编译和debug

最近有用c++写项目的需求(c语言也一样),电脑里只有vscode,懒得下载其他编译器,遂研究使用cmake打算试试,找了其他博客,发现写的都很冗长,不喜欢这种风格,于是自己写一个[确保复制粘贴稍微改改就能速通]版本**😃**

步骤1:检查VSCode插件安装

必需扩展:

  • C/C++ (Microsoft)
  • CMake Tools (Microsoft)
  • CMake (twxs) - 用于语法高亮
  • LLDB

可选但推荐:

  • Code Runner - 快速运行代码

步骤2: brew install cmake

用homebrew安装cmake,打开终端(cmd+空格搜索“终端”)

brew install cmake

使用mac没有homebrew建议装一个,站内搜索“homebrew一键安装脚本”即可,站内有很多大佬写的自动化脚本,方便快捷,此处不赘述。

步骤3:复制以下项目配置文件(需简单修改)

参考项目工程目录:

SeqList/
├── CMakeLists.txt # CMake配置文件
├── .vscode/ # VSCode配置文件夹(构建(build)会自动生成
│ ├── settings.json # 工作区设置 (一会复制粘贴)
│ ├── launch.json # 调试配置 (一会复制粘贴)
│ ├── tasks.json # 构建任务配置 (一会复制粘贴)
│ └── c_cpp_properties.json # C/C++扩展配置(不用管)
├── src/
│ ├── main.c # 主程序文件(你自己写的
│ └── test.c # 实现文件(你自己写的,这里设置两个作为例子)
├── include/
│ └── test.h # 头文件(你自己写的
└── build/ # 构建输出目录(系统自动生成
└── test # 可执行文件

  1. 创建CMakeLists.txt

    在你的项目根目录下创建该文件,复制以下代码,看备注,根据你自己内容修改

    cmake_minimum_required(VERSION 3.26)#版本可修改
    project(your_project_name)#改成你自己的项目名
    
    set(CMAKE_CXX_STANDARD 17)  # 设置C++标准
    
    # 添加头文件目录
    include_directories(include)
    
    # 收集源文件(收集src目录下所有源文件,可根据你自己目录修改)
    file(GLOB_RECURSE SOURCES "src/*.cpp" "src/*.c")
    
    # 创建可执行文件
    add_executable(${PROJECT_NAME} ${SOURCES})
    
    # 如果有额外的库依赖,可以这样添加:
    # find_package(库名 REQUIRED)
    # target_link_libraries(${PROJECT_NAME} 库名)
    
  2. 配置CMake
    • Ctrl+Shift+P
    • 输入 “CMake: Configure”
    • 选择编译器(GCC或Clang都可以)

在这里插入图片描述

  1. 配置.vscode文件

    这时你的项目目录下应该已经出现了.vscode文件夹,修改或创建以下三个json文件(基本通用,直接复制粘贴,看备注,需修改部分内容

    a. vscode/launch.json (调试配置)
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Debug",
                "type": "cppdbg",
                "request": "launch",
                "program": "${workspaceFolder}/build/your_project_name",  // 此处需修改成你自己的项目名
                "args": [],
                "stopAtEntry": true,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "lldb"  // macOS使用lldb,Linux使用gdb
            }
        ]
    }
    
    b.vscode/tasks.json (构建任务)
    {
        "version": "2.0.0",
        "tasks": [
            {
                "label": "cmake build",
                "type": "shell",
                "command": "cmake",
                "args": ["--build", "build"],
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
                "problemMatcher": "$gcc"//如果使用clang就改成clang
            }
        ]
    }
    
    c.vscode/settings.json:(工作区设置)
    {
        "cmake.buildDirectory": "${workspaceFolder}/build",
        "cmake.generator": "Unix Makefiles",
        "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
        "files.associations": {
            "*.h": "c",
            "*.c": "c"
        }
    }
    

步骤4:构建项目

方法1 - 命令面板

  • Ctrl+Shift+P → “CMake: Build”

方法2 - 状态栏

  • 点击底部状态栏的 “Build” (生成)按钮

看到这个页面就成功了

在这里插入图片描述

如果你遇到路径问题(找不到二进制文件):

清尝试将launch.json的这一行:

"program": "${workspaceFolder}/build/your_project_name", 

修改成绝对路径

写在最后:

如果你依旧遇到问题,推荐下载CLion,开箱即用,能省略很多自己的配置,硬磕vscode还是有些费劲了,然后把我上面博客中CMakeLists.txt的内容自己改改粘贴过去就行了,这个绝对没有问题

<think>我们正在处理一个关于将Keil MDK项目导入到VSCode EIDE并使用GCC编译器进行编译的问题。以下是需要注意的事项: 1. **项目结构转换**: - Keil MDK使用`.uvprojx`项目文件,而EIDE使用基于`CMake`或`EIDE`自己的项目格式。需要将MDK项目转换为EIDE项目。 - EIDE插件提供了导入Keil项目的功能,但可能需要手动调整。 2. **编译器更换**: - MDK默认使用ARMCC或ARMCLANG,而我们将使用GCC(如arm-none-eabi-gcc)。需要替换编译器相关的设置。 - 注意编译器选项的差异,例如优化级别、宏定义、包含路径等。 3. **启动文件与链接脚本**: - MDK项目通常使用`.s`启动文件`.sct`分散加载文件。GCC使用相同的启动文件(可能需要小修改)`.ld`链接脚本。 - 需要将`.sct`文件转换为`.ld`文件,或重新编写链接脚本。 4. **外设库与CMSIS**: - 确保项目中的外设库(如STM32 HAL库)CMSIS头文件路径正确,并且与GCC兼容。 - GCC可能需要额外的编译选项来指定CPU核心FPU。 5. **调试配置**: - 如果使用调试器(如J-Link、ST-Link),需要配置EIDE的调试设置,使用GDB进行调试。 6. **构建与问题排查**: - 构建过程中可能会遇到头文件路径错误、未定义符号等问题,需要逐一解决。 - 注意GCC对C语言的严格性,可能比ARMCC更严格,需要修正代码中的警告或错误。 下面是一个简化的步骤示例: ### 步骤示例 1. 在VSCode中安装EIDE插件。 2. 使用EIDE的导入功能导入Keil项目。 3. 在项目设置中,将编译器从ARMCC改为GCC。 4. 检查并修改编译选项,确保包含路径、宏定义等正确。 5. 转换或重新编写链接脚本(.ld文件)。 6. 调整启动文件(如果有必要,例如修改汇编语法)。 7. 构建项目并解决错误。 §§相关问题§§ 1. 如何将Keil MDK的分散加载文件(.sct)转换为GCC的链接脚本(.ld)? 2. 在使用GCC编译STM32项目时,常见的编译选项有哪些? 3. EIDE导入Keil项目后,如何配置调试器? 4. 如何解决从ARMCC切换到GCC时出现的未定义符号错误?</think>### 将Keil MDK项目导入VSCode EIDE并使用GCC编译的注意事项 #### 1. **项目结构转换** - **关键步骤**: - 使用EIDE的`Import Keil Project`功能导入`.uvprojx`文件 - 手动检查以下文件是否完整迁移: ```plaintext /Inc # 头文件目录 /Src # 源文件目录 /Drivers # 外设库 startup_stm32fxxx.s # 启动文件(需转换) system_stm32fxxx.c # 系统初始化文件 ``` - **注意**:Keil的`.sct`分散加载文件需手动转换为GCC的`.ld`链接脚本[^1] #### 2. **编译器配置** - **GCC设置**: ```json // EIDE的project.json配置示例 "toolchain": "AC6", "compilerPath": "C:/gcc-arm/bin/arm-none-eabi-gcc.exe", "cStandard": "c11", "cppStandard": "c++17", "defines": [ "USE_HAL_DRIVER", "STM32F407xx" ] ``` - **关键差异**: - 替换ARMCC特有的`#pragma`指令(如位置放置) - GCC需要显式添加`-specs=nosys.specs`避免链接错误 - 优化级别需重新映射:`-O0`→`-Og`, `-O3`→`-Ofast` #### 3. **启动文件适配** - **汇编语法转换**: ```diff - AREA RESET, CODE, READONLY + .section .isr_vector - DCD __initial_sp + .word _estack - IMPORT SystemInit + .global SystemInit ``` - **必要修改**: 1. 所有`IMPORT`改为`.global` 2. `PROC/ENDP`改为函数标签 3. 添加`.type``.thumb_func`指令 #### 4. **外设库调整** - **HAL库兼容性**: - 删除`core_cmFunc.h`中GCC不支持的`__nop()`内联汇编 - 替换`__packed`为`__attribute__((packed))` - 修正`__weak`函数的多重定义警告 - **时钟配置**: - 检查`SystemInit()`中的时钟树配置 - 确认GCC编译时`HSI_VALUE`宏正确定义 #### 5. **构建系统配置** - **Makefile关键项**: ```makefile CFLAGS += -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard LDFLAGS += -TSTM32F407VGTx_FLASH.ld -Wl,--gc-sections LIBS += -lc -lm -lnosys # 标准库依赖 ``` - **常见错误处理**: - `undefined reference to _sbrk`:添加`_sbrk()`弱符号实现 - `.data section overlap`:检查`.ld`文件中的`RAM`区域划分 #### 6. **调试配置** - **launch.json示例**: ```json { "type": "cortex-debug", "servertype": "openocd", "device": "STM32F4x", "configFiles": ["interface/stlink.cfg", "target/stm32f4x.cfg"] } ``` - **调试要点**: - 确认`.elf`文件路径匹配 - 使用`arm-none-eabi-size`验证代码尺寸 - 半主机模式需添加`--specs=rdimon.specs` > **迁移建议**:优先处理启动文件链接脚本,再逐步解决外设库警告。使用`-Wno-packed`临时抑制警告,最终需修正所有`packed`属性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值