VScode+CMake+MinGW编译C/C++源码
win下使用VSCode编译C/C++源码
新机器想使用vscode编译C/C++源码,想使用批处理文件执行编译
一.前提
- win11
- vscode(版本:1.89.0)
- MinGW( 版本:MinGW-W64-builds-4.3.5) 需要将目录下的bin配置在环境变量中。
- CMake( 版本:3.29.3 ) 注意选择配置环境变量,或者自己手动配置
在命令提示符中(运行-cmd),检查如下相关命令是否安装成功
g++ -v gcc -v cmake -version
打开vscode安装如下几个插件
- C/C++
- C/C++ Extension Pack
- CMake
- CMake Tools

二.准备文件目录

- bin 存放可执行文件
- build_path 执行cmake相关命令文件
- build_path/build 构建文件目录及生成的makefile文件
- build_path/cfg 存放CMake的配置文件CMakeLists.txt
- lib 存放静态库文件目录
- src 源码目录
- test 单元测试目录
三.创建CMake配置文件(CMakeLists.txt)
将如下内容保存在CMakeLists.txt中
#指定cmake版本,与安装版本有关,若版本太低,会提示支持的最低版本 cmake_minimum_required(VERSION 3.5.0)
#CMAKE_BINARY_DIR 是指执行CMake构建的目录即 " build_path/build " #设置相关系统/自定义变量, 后续通过${变量名} 来调用 set(CMAKE_C_COMPILER "E:/Program Files/mingw64/bin/gcc.exe") #编译c源码 set(CMAKE_CXX_COMPILER "E:/Program Files/mingw64/bin/g++.exe") #编译C++源码 set(PROJECT_ROOT ${CMAKE_BINARY_DIR}/../..) #项目根路径 set(PROJECT_SOURCE_PATH ${PROJECT_ROOT}/src) #源码根路径 SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_ROOT}/bin) #设置输出存放路径 #set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_ROOT}/dll) #设置dll存放路径-动态库 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_ROOT}/lib) #设置lib存放路径-静态库 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_ROOT}/bin) #设置exe/dll存放路径-可执行文件路径 #打印变量 message("打印{CMAKE_BINARY_DIR}输出:" ${CMAKE_BINARY_DIR}) #设置项目名称(${PROJECT_NAME} 替代_dllname),设置版本号,设置语言类型C或CPP project(_dllname VERSION 0.1.0 LANGUAGES CXX) # 载入所有文件到ALL_SOURCES file(GLOB ALL_SOURCES ${PROJECT_SOURCE_PATH}/*.cpp ${PROJECT_SOURCE_PATH}/*.h) # 编译源码生成dll文件(使用项目名称.dll) #add_library(${PROJECT_NAME} SHARED ${ALL_SOURCES})
#生成可执行文件exe
add_executable(${PROJECT_NAME} ${ALL_SOURCES})
四.创建批处理文件,完成构建与编译
将如下代码保存在 pro_build_file.bat(批处理文件)
@echo off rem 查看当前目录下有哪些文件 rem dir echo "params one:" %1 rem 参数:cmake_cfg_path 设置CMakeLists.txt所在目录 rem echo 参数: cmake_cfg_filename 设置CMake的配置文件 rem 参数: cmake_build_path 设置CMake构建目录 rem 参数设置 set args=%1 set bat_cur_path=%~dp0 set disc_name=%~d0 set cmake_cfg_path=%bat_cur_path%cfg set cmake_build_path=%bat_cur_path%build set cmake_cfg_filename=CMakeLists.txt echo %disc_name% REM 跳转至 磁盘 %disc_name% ,若从别的磁盘执行该脚本,会在其他磁盘 %disc_name% rem 目录不存在 if not exist %cmake_cfg_path% ( echo " dirname :cfg is not exist!" rem "exit /b" 参数/b 只关闭当前脚本,不会关闭父进程 exit /b rem mkdir cfg ) if not exist %cmake_build_path% ( echo " dirname :build is not exist!" exit /b rem mkdir build ) rem 配置文件(CMakeLists.txt)不存在 if not exist %cmake_cfg_path%\%cmake_cfg_filename% ( echo " CMakeLists.txt is not exist!" exit /b ) rem 传入参数校验 if "%args%" == "_build" ( rem 第一次构建,并编译生成 cd %cmake_build_path% cmake -G "MinGW Makefiles" %cmake_cfg_path% mingw32-make ) else if "%args%" == "clean" ( rem 清理所有构建文件 cd %cmake_build_path% rem dir del /s /q * rem cmake -G "MinGW Makefiles" %cmake_cfg_path% rem mingw32-make ) else if "%args%" == "build" ( cd %cmake_build_path% cmake %cmake_cfg_path% mingw32-make ) else ( cd %cmake_build_path% mingw32-make ) cd %bat_cur_path% pause
五. 执行批处理文件,场景
rem 打开命令提示符 输入如下代码
rem 如下第一次构建且编译 场景:未生成构建文件
pro_build_file.bat _build
rem 第二次以上构建且编译 场景:新增文件
pro_build_file.bat build
rem 清理构建文件 并构建编译,场景: 变更文件目录 等等
pro_build_file.bat clean
rem 如下:无参命令,直接编译 场景:只是修改代码
pro_build_file.bat
六. 执行文件
打开bin目录,执行xx.exe文件
浙公网安备 33010602011771号