在windows环境下利用CMAKE和MingW开发程序

在windows上进行C/C++程序开发,一般都习惯了用集成IDE环境进行开发,尤其是VISUAL STUDIO,但是随着IDE版本的演进,对应的安装程序体积越来越大。对应安装程序的下载困难,安装复杂,同时安装也占PC资源,对于非专门的软件工程师,只是工作中偶尔开发一些小工具辅助测试,很不划算。
今天基于一个简单求两个数据之和的简单程序,描述一下采用比较轻便的工具进行程序的开发。

CMAKE工具安装

下载CMAKE工具安装程序,对应为开源软件,对应下载位置为:CMAKE工具下载
此处可以直接下载windows的安装版本,请根据各自电脑情况选择下载版本,主要是区分32位版本还是64位版本。下载好后双击打开安装,安装过程比较简单,一路确定即可。
CMake 是一个‌构建系统生成器‌,一般情况下不需要配置环境变量‌(安装是自动添加环境变量) ‌。安装结束后可以在windows的cmd界面中查看CMake的版本,以便确认是否安装好。
cmake安装后版本查询
在某些情况下,上述不能输出CMake的版本,此时需要将CMake的路径加入系统的环境变量PATH中。

MingW安装

MinGW(Minimalist GNU for Windows)是Windows特定头文件和使用GNU工具集导入库的集合,能够帮助用户将源代码编译为可在Windows中运行的可执行程序。
MinGW-w64可以通过安装程序进行安装,或者手动下载压缩包并解压到指定目录(如D:\mingw64)安装。对应下载位置为:MingW64工具下载
安装或解压好后,需要将MinGW-w64的bin目录(如D:\mingw64\bin)添加到系统的PATH环境变量中。配置完成后,在命令提示符(cmd)中输入gcc -v或gcc --version,可以查看版本信息以验证安装是否成功。
MingW64安装后版本查询

VSCODE编辑器安装

对应上述工具只是工程构建工具和编译器等,对应程序编写需要有一个好的编辑工具,目前采用VSCODE为不二之选。由于VSCODE的安装介绍资料实在太多,对应软件和插件相关安装此处不再啰嗦。

代码编写

建立一个文件,在文件夹中建立一个程序文件,如tutorial.cpp,对应内容如下:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[])
{
    if(argc < 3){
        fprintf(stdout,"usage:%s need more para\n",argv[0]);
        return 1;
    }

    double input_value1 = atof(argv[1]);
    double input_value2 = atof(argv[2]);
    double output_value = input_value1 + input_value2;
    fprintf(stdout,"the sum of %g + %g is %g \n",input_value1,input_value2,output_value);
    return 0;
}

CMake构建脚本编写

在文件夹下建立CMakeLists.txt文件,输入对应内容如下:

cmake_minimum_required(VERSION 3.20)
project(Tutorial CXX)
add_executable(tutorial tutorial.cpp)

编写工程管理批处理文件

为加快工程修改后编译操作速度,此处编写一个工程管理批处理文件rebuild.bat。
此批处理对应删除上次编译输出的执行文件,并删除对应的编译输出文件夹build,再重新生成build,并进入build文件夹中对工程进行编译。最后将编译生成的执行文件拷贝到工程根目录下。
对应批处理文件内容如下:

@echo off
setlocal enabledelayedexpansion

set BUILD_DIR=build
set PARENT_DIR=..

:: 0. 删除当前目录(项目根目录)下的所有 .exe 文件
echo Deleting all .exe files in current directory...
del /q *.exe 2>nul
echo Done.

:: 1. 删除旧的 build 文件夹(如果存在)
if exist "%BUILD_DIR%" (
    echo Removing existing %BUILD_DIR% folder...
    rmdir /s /q "%BUILD_DIR%"
    if errorlevel 1 (
        echo Failed to remove %BUILD_DIR%
        exit /b 1
    )
)

:: 2. 创建新的 build 文件夹
echo Creating %BUILD_DIR% folder...
mkdir "%BUILD_DIR%"
if errorlevel 1 (
    echo Failed to create %BUILD_DIR%
    exit /b 1
)

:: 3. 进入 build 文件夹并运行 CMake
cd "%BUILD_DIR%"
echo Running CMake with MinGW Makefiles...
cmake -G "MinGW Makefiles" ..
@REM cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER="C:/mingw/mingw64/bin/gcc.exe" -DCMAKE_CXX_COMPILER="C:/mingw/mingw64/bin/g++.exe" 
if errorlevel 1 (
    echo CMake configuration failed
    exit /b 1
)

:: 4. 运行 make
echo Building with make...
mingw32-make
if errorlevel 1 (
    echo Build failed
    exit /b 1
)

:: 5. 拷贝所有 .exe 文件到父目录,但排除 a.exe
echo Copying all .exe files (except a.exe) from %CD% and subdirectories to %PARENT_DIR%...
for /r %%f in (*.exe) do (
    set "filename=%%~nxf"
    if /i not "!filename!"=="a.exe" (
        echo Copying "%%f" to "%PARENT_DIR%\"...
        copy "%%f" "%PARENT_DIR%\" >nul
    ) else (
        echo Skipping "%%f"
    )
)
echo Copy completed.

:: 6. 返回项目根目录
cd ..

echo All done.
endlocal

构建并编译工程

在CMD界面内(实际使用vscode的终端)执行rebuild.bat脚本,进行工程的构建和编译。
执行情况如下:

E:\cmake>rebuild
Deleting all .exe files in current directory...
Done.
Removing existing build folder...
Creating build folder...
Running CMake with MinGW Makefiles...
-- The CXX compiler identification is GNU 8.1.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/mingw/mingw64/bin/c++.exe - skipped
-- Detecting CXX compile features       
-- Detecting CXX compile features - done
-- Configuring done (2.3s)
-- Generating done (0.0s)
-- Build files have been written to: E:/cmake/build
Building with make...
[ 50%] Building CXX object CMakeFiles/tutorial.dir/tutorial.cpp.obj
[100%] Linking CXX executable tutorial.exe
[100%] Built target tutorial
Copying all .exe files (except a.exe) from E:\cmake\build and subdirectories to .....
Copying "E:\cmake\build\tutorial.exe" to "..\"...
Skipping "E:\cmake\build\CMakeFiles\4.2.3\CompilerIdCXX\a.exe"
Copy completed.
All done.

工程执行验证

在cmd界面运行程序,结果如下:

E:\cmake>tutorial.exe 1234.56 6543.21
the sum of 1234.56 + 6543.21 is 7777.77 

至此,在windows环境下利用CMAKE和MingW开发程序实现。当工程中程序文件增多时,对应CMake的操作会有一定的难度,需各位在遇到问题时自行解决。

提示

此处仅描述了控制台程序的开发,如果需要界面,可以利用QT进行开发,开发流程基本一致。对应QT相关的开发,各种参考资料非常多,可自行找资料学习。

更多推荐