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

news2024/9/30 21:24:18

前言

笔者在做嵌入式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/
在这里插入图片描述

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

解压后如下:
在这里插入图片描述
将解压后的mingw64文件夹拷贝到想要放置的目录。这里直接是安装好的文件,直接用就行了
笔者放到了D:\Program Files\mingw64
在这里插入图片描述
然后添加环境变量
在这里插入图片描述
添加好后,在桌面上shift+右键 打开powershell。输入gcc --version
在这里插入图片描述
如上,则mingw安装完成

CMake安装

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

编译构建

直接gcc编译单个文件

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

#include <stdio.h> 

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

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

CMake构建系统

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

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

这里新建一个拥有两个子文件夹的项目,其目录结构如下:
在这里插入图片描述
注意,每一级目录都需要有CMakeLists.txt文件。功能很简单,main函数调用 age函数和name函数。这两个函数分别打印出名字,和年龄。这基本上包含了一个最小的多文件目录的项目。

age目录

** age_1.c**


#include <stdio.h>
#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 <stdio.h>
#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 <stdio.h>
#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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea多时编辑多行-winmac都支持

1背景介绍 idea编辑器非常强大&#xff0c;其中一个功能非常优秀&#xff0c;很多程序员也非常喜欢用。这个功能能够大大大提高工作效率-------------多行代码同时编辑 2win 2.1方法1 按住alt鼠标左键上/下拖动即可 这样选中多行后&#xff0c;可以直接多行编辑。 优点&a…

jsp物品找回系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 物品找回系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5 开发&#xff0c;数据库为Mysql&#xff0c;使用j…

一文搞定python语法进阶

前言前面我们已经学习了Python的基础语法&#xff0c;了解了Python的分支结构&#xff0c;也就是选择结构、循环结构以及函数这些具体的框架&#xff0c;还学习了列表、元组、字典、字符串这些Python中特有的数据结构&#xff0c;还用这些语法完成了一个简单的名片管理系统。下…

Java基础-类加载器

写在前面的话&#xff1a; 基础加强包含了&#xff1a; 反射&#xff0c;动态代理&#xff0c;类加载器&#xff0c;xml&#xff0c;注解&#xff0c;日志&#xff0c;单元测试等知识点 其中最难的是反射和动态代理&#xff0c;其他知识点都非常简单 由于B站P数限制&#xff0c…

交互式前端开发最好用的WebGL框架

JavaScript是创建Web最有用的编程语言之一&#xff0c;尤其是在WebGL库的支持下。有了WebGL&#xff0c;可以很方便地使用 HTML5 Canvas 元素动态生成图形。因此&#xff0c;设计师和开发人员很容易创建流畅的2D和3D效果。WebGL是JavaScript API或基于OpenGL的库&#xff0c;它…

CD20靶向药物|适应症|市场销售-上市药品前景分析

CD20是靶向治疗的第一个靶点&#xff0c;是B细胞淋巴瘤的现代治疗药物。CD20作为治疗剂的使用被认为是方便的&#xff0c;原因有二。首先&#xff0c;在 CD20 阳性肿瘤的情况下&#xff0c;这种受体大量存在于 B 淋巴细胞表面——每个细胞大约有十万个分子。其次&#xff0c;干…

火山引擎入选《2022 爱分析 · DataOps 厂商全景报告》,旗下 DataLeap 产品能力获认可

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 2 月 9 日&#xff0c;国内领先的数字化市场研究与咨询机构爱分析发布了《2022 爱分析DataOps 厂商全景报告》&#xff08;以下简称报告&#xff09;&#xff0c;报…

java程序,springboot程序 找不到主类,找不到符号解决思路

文章目录问题解决方案一.可以尝试clean掉maven依赖&#xff0c;然后重新启动二.右键工程&#xff0c;选择maven然后重新加载工程&#xff0c;接着再启动试试三.删掉工程中的services.iml文件&#xff0c;重新配置后接着再启动试试四. 终极方案清除idea缓存&#xff0c;重启idea…

Rust之错误处理(二):带结果信息的可恢复错误

开发环境 Windows 10Rust 1.67.1VS Code 1.75.1项目工程 这里继续沿用上次工程rust-demo 带结果信息的可恢复错误 大多数错误并没有严重到需要程序完全停止的程度。有时&#xff0c;当一个函数失败时&#xff0c;它的原因是你可以很容易地解释和应对的。例如&#xff0c;如…

LearnOpenGL - 如何理解 VAO 与 VBO 之间的关系

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好&#xff0c;窗口LearnOpenGL 笔记 - 入门 04 你好&#xff0c;三角形 文章目录系列文章目录1. 前言2. 渲染管线的入口 - 顶点着色器2.1 顶点着色器处理过…

Day891.一主多从的切换正确性 -MySQL实战

一主多从的切换正确性 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于一主多从的切换正确性的内容。 在切换任务的时候&#xff0c;要先主动跳过这些错误&#xff0c;通过主动跳过一个事务或者直接设置跳过指定的错误&#xff0c;用GTID解决找同步位点的问题 大多…

oracle查找各PDB密码过期账户

连接oracle的时候&#xff0c;又报 ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程序 的错误。这种现象之前遇到不少&#xff0c;猜测可能又是某个sde账号密码过期或快过期&#xff0c;导致arcgis不停地连数据库&#xff0c;因而连接耗尽了。详见拙作&#xff1a…

电脑c盘满了怎么清理,c盘空间清理

电脑c盘满了怎么清理&#xff1f;电脑C盘满了可能是因为您的操作系统、程序文件、下载文件、临时文件、垃圾文件等占用了太多的存储空间。所以&#xff0c;我们就需要进行一些操作和清理。 一.清理电脑C盘的方法 清理临时文件和垃圾文件。在Windows上&#xff0c;您可以使用系…

windows10 安装DOSbox_32 debug.exe

windows10 安装DOSbox_32 debug.exe1.下载2. 安装DOSBox0.74-3-win32-installer.exe3. 配置DOSBox3. 启动DOSBox.exe4. 测试执行debug命令1.下载 DOSBox0.74-3-win32-installer.exe安装包debug.exe 2. 安装DOSBox0.74-3-win32-installer.exe 解压 双击DOSBox0.74-3-win32-insta…

QT+OPenGL模型加载 - Assimp

QTOPenGL模型加载 - Assimp 本篇完整工程见gitee:QtOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主 模型加载 先来张图&#xff1a; 我们不大可能手工定义房子、汽车或者人形角色这种复杂形状所有的顶点、法线和纹理坐标。我…

【surfaceflinger源码分析】surface与surfaceflinger之间的关系

本篇文章带着以下问题继续分析surfaceflinger的源码: 什么是surface ? surface与图形数据之间是什么关系&#xff1f;surface和surfaceflinger之间是什么关系&#xff1f; Surface定义 先看看Surface这个类的定义&#xff0c;主要是定义了很多与GraphicBuffer相关的操作。 …

k8s(存储)数据卷与数据持久卷

为什么需要数据卷&#xff1f; 容器中的文件在磁盘上是临时存放的&#xff0c;这给容器中运行比较重要的应用程序带来一些问题问题1&#xff1a;当容器升级或者崩溃时&#xff0c;kubelet会重建容器&#xff0c;容器内文件会丢失问题2&#xff1a;一个Pod中运行多个容器并需要共…

创邻科技荣获人行旗下《金融电子化》年度大奖

近日&#xff0c;创邻科技收到由中国人民银行旗下《金融电子化》杂志社寄来的奖牌。 在《金融电子化》杂志社主办的第十三届金融科技应用创新奖中&#xff0c;创邻科技凭借“原生分布式图数据库Galaxybase解决方案”&#xff0c;从近400个参报案例中脱颖而出&#xff0c;荣获“…

Linux下zabbix_proxy实施部署

简介 zabbix proxy 可以代替 zabbix server 收集性能和可用性数据,然后把数据汇报给 zabbix server,并且在一定程度上分担了zabbix server 的压力. zabbix-agent可以指向多个proxy或者server zabbix-proxy不能指向多个server zabbix proxy 使用场景: 1&#xff0c;监控远程区…

【React全家桶】reac组件通信

&#x1f39e;️&#x1f39e;️&#x1f39e;️ 博主主页&#xff1a; 糖 &#xff0d;O&#xff0d; &#x1f449;&#x1f449;&#x1f449; react专栏&#xff1a;react全家桶 &#x1f339;&#x1f339;&#x1f339;希望各位博主多多支持&#xff01;&#xff01;&a…