windows配置c语言编译系统-wingw gcc cmake

前言

笔者在做嵌入式mcu编程的时候,有时候想要验证一下部分代码的功能,需要先编译成bin文件,然后烧录到mcu内执行。每次编译烧录运行耗时较久。于是想到是不是可以在电脑上配置一个c的编译环境,来验证一些与硬件不相干的代码。验证好后,直接放到keil编译,烧录到mcu。这样直接在电脑上验证可以节省不少时间,提高效率。

由于只是简单的验证部分代码,又不是要开发c工程,能搞一个轻量化的编译环境是比较好的。所以windows上实用率较高的vs studio,Code::Blocks这些集成编译环境首先就pass掉了。于是就想到是不是需要可以把linux上的,gcc make这些好用的编译方法移植到windows上呢?经过查找资料发现,使用wingw + cMake 完全能够满足需求。有了cMake就不需要自己编写Makefile了(Makefile语法学过多次,还是不能熟练应用)。本篇做一个简单的配置教程,以及一个常见的多目录多文件的编译实例。

mingw安装

Minimalist GNU for Windows- windows上最简洁的GNU编译器。其网址如下:
https://sourceforge.net/projects/mingw-w64/files/
windows配置c语言编译系统-wingw gcc cmake_第1张图片

下载图中的一个就行了,但是官网下载速度非常慢,这里给出笔者下载好的文件,

解压后如下:
windows配置c语言编译系统-wingw gcc cmake_第2张图片
将解压后的mingw64文件夹拷贝到想要放置的目录。这里直接是安装好的文件,直接用就行了
笔者放到了D:\Program Files\mingw64
windows配置c语言编译系统-wingw gcc cmake_第3张图片
然后添加环境变量
windows配置c语言编译系统-wingw gcc cmake_第4张图片
添加好后,在桌面上shift+右键 打开powershell。输入gcc --version
windows配置c语言编译系统-wingw gcc cmake_第5张图片
如上,则mingw安装完成

CMake安装

CMake官网下载地址:https://cmake.org/download/
windows配置c语言编译系统-wingw gcc cmake_第6张图片
官网下载速度也比较慢,建议下载Windows x64 Installer,这个只有20多M,下载的快些。这里给出笔者下载好的。
下载完成后,点击安装即可。
安装好后,在桌面打开powershell,输入cmake --verson
在这里插入图片描述
如上则安装成功

编译构建

直接gcc编译单个文件

对于只有一个文件的程序,直接用gcc编译更快。示例如下:
在桌面上新建一个test.c文件,内容如下:

#include  

int main(void)
{
    printf(" hello gcc \r\n");
}

编译及输出如下:
在这里插入图片描述
实际在验证的时候基本不可能是这么简单的一个.c文件,肯定是包含多个目录的多个.c和.h文件。这直接在终端用gcc编译肯定不靠谱。所以需要编译构建系统CMake来完成文件的链接等等工作。

CMake构建系统

CMake是一个编译构建系统,可以通过简单的配置,来实现编译文件的链接。cmake编译后实际生成的是makefile文件,然后通过make命令来进行最终编译。其流程如下:

新建CMakeLists.txt -> CMake 构建 -> 生成Makefile -> make 进行编译->运行生成的.exe文件

这里新建一个拥有两个子文件夹的项目,其目录结构如下:
windows配置c语言编译系统-wingw gcc cmake_第7张图片
注意,每一级目录都需要有CMakeLists.txt文件。功能很简单,main函数调用 age函数和name函数。这两个函数分别打印出名字,和年龄。这基本上包含了一个最小的多文件目录的项目。

age目录

** age_1.c**


#include 
#include "age_1.h"


void age(void)
{
    printf("age is 18\r\n");
}

** age_1.h**

#ifndef __AGE_1_H
#define __AGE_1_H
void age(void);
#endif

** CMakeLists.txt**

aux_source_directory(. AGE_SRC)
add_library(lib_age ${AGE_SRC})

name目录

name.c

#include 
#include "name_1.h"

void name(void )
{
    printf("name is jose\r\n");
}

** name.h**

#ifndef __NAME_1_H__
#define __NAME_1_H__
void name(void );
#endif

** CMakeLists.txt**

aux_source_directory(. NAME_SRC)
add_library(lib_name ${NAME_SRC})

根目录

** main.c**

#include 
#include "age_1.h"
#include "name_1.h"


int main(void)
{
    name();
    age();
    printf("done\r\n");
}

** CMakeLists.txt**


cmake_minimum_required (VERSION 3.0) #指定最低cmake版本
project(MAIN) #定义项目名称可以不加

aux_source_directory(. ALL_SRC) #添加当前目录的源文件
include_directories(${PROJECT_SOURCE_DIR}/age ./name ) #添加头文件路径
# target_include_directories(simple PUBLIC "./nanopb")
add_subdirectory(name) #添加子目录源文件
add_subdirectory(age) #添加子目录源文件
add_executable(main ${ALL_SRC} ) #指定编译输出的文件名称
target_link_libraries(main lib_name lib_age) #链接子目录的库,一定要有

编译运行

在根目录执行
cmake构建命令

cmake -G “MinGW Makefiles” .

编译命令

mingw32-make.exe

最终运行结果如下:
在这里插入图片描述
如果说不需要新增加文件目录,CMakeLists.txt基本不用修改。添加.c和.h文件后,只需要运行上述两条命令即可运行。

下载

本文所有文件下载:
工程文件
https://download.csdn.net/download/sinat_36568888/87458583

mingw
https://download.csdn.net/download/sinat_36568888/87458585

cmake
https://download.csdn.net/download/sinat_36568888/87458578

你可能感兴趣的:(教程,windows,cmake,gcc,编译c,mingw)