怎么在Windows下使用Makefile文件

2023-10-29

 【推荐阅读】

virtio-net 实现机制【一】(图文并茂)

浅析linux内核网络协议栈--linux bridge

深度解析linux内核模块编译makefile

前言:如果熟悉在Linux开发的话,肯定知道Makefile文件的用处,它给我们带来很多的便利。在Linux系统下并不会像Windows那么多开发工具,在Windows下,只要在开发工具上点击一个按钮,就能将工程的所有源码进行编译运行。而在Linux下,工程源文件的编写往往是使用一个简单的编辑器(VIM),然后通过Makefile文件进行自动化编译。而我接下来想说的是,如何在Windows上如同Linux般使用Makefile文件进行编译。可能有人觉得没那个必要,因为Windows的开发工具数不胜数,随便一个都非常好用,不可否认,懂得利用开发工具开发是可大大提高开发效率。当然,接下我是从基础的知识出发,不仅仅是对Makefile文件的学习,从中还可帮你解开以往的一些疑惑,或者让你学习到一些新的有趣的知识。

1.搭建环境

1.gcc编译器下载,TDM-GCC,打开根据自己电脑的类型选择合适的程序,我的是win7/32bit,所以选择下载第一个:

2.下载完成后,以管理员方式打开安装程序,点击Create后:

3.选择相应的版本,点击Next,接下来会选择安装路径,自己随便选择一个不带中文的路径就行。

4.最后点击Install进行安装,安装完成后,可以在自己设置的安装路径下有这么一个文件夹“TDM-GCC-32”,接下来配置环境变量。打开控制面板 > 系统和安全 > 系统 >高级系统设置 > 环境变量:

添加系统变量,变量值是自己刚刚选择的安装路径,我安装在C盘,如下图:

找到变量Path,在后面加入 “;%GCC_PATH%\bin”,如图:

点击确定保存设置。

5.点击电脑桌面左下角,搜索cmd,以管理员身份打开cmd.exe,输入“gcc -v”:

得到如上输出可确认gcc编译器已正确安装,版本是5.1.0。

6.继续输入“mingw32-make -v”:

相对于Linux的make不同,这里是mingw32-make,在cmd里用cd命令切换在Makeflie文件所在目录,命令行输入mingw32-make回车运行,就行执行Makefile文件,进行自动化编译。

2.执行一个简单的Makefile文件:

1.将下面各个文件保存在同一目录下:

"src_a.c"
#include "stdio.h"
void funca()
{
	printf("funca runing!!!\r\n");
}
 
"src_b.c"
#include "stdio.h"
void funcb()
{
	printf("funcb runing!!!\r\n");
}
 
"src_c.c"
#include "stdio.h"
void funcc()
{
	printf("funcc runing!!!\r\n");
}
 
"main.c"
#include "stdio.h"
extern void funca();
extern void funcb();
extern void funcc();
int main()
{
	funca();
	funcb();
	funcc();
}
 
"Makefile"
mian : main.o  src_a.o src_b.o  src_c.o
	gcc main.o src_a.o src_b.o src_c.o -o main
 
main.o : main.c
	gcc main.c -c -o main.o
 
src_a.o : src_a.c
	gcc src_a.c -c -o src_a.o
 
src_b.o : src_b.c
	gcc src_b.c -c -o src_b.o
 
src_c.o : src_c.c
	gcc src_c.c -c -o src_c.o
 
 
.PHONY : clean
clean:
	del *.o main.exe -rf

Makefile可以暂时不用理解,这里只是一个简单通俗的例子。

所有文件创建完成如下:

2.打开cmd,切换到以上的目录,输入“mingw32-make”:

得到main.exe可执行文件,输入main.exe回车运行:

然后在资源管理器里查看Test目录会发现多了一些编译的过程文件(.o):

cmd输入命令“”mingw32-make clean”,将输出文件删除:

到此,我可以在Windows下利用CMD命令通过Makefile对源文件进行编译运行了。

环境搭建好了之后,再从学习gcc命令开始,才能逐步理解Makefile文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

怎么在Windows下使用Makefile文件 的相关文章

  • 在 Linux 上,当打开套接字时,Java 会发出反向 DNS 查找。为什么,我该如何阻止它?

    我们在 Linux 上遇到了一种非常奇怪的行为 Java DNS 查找 更新 Mac OS X 上也会发生 我错了 我们将Google公共DNS服务器8 8 8 8设置为JVM DNS服务器 然而 系统 etc resolv conf 服务
  • 在 bash tee 中,正在将函数变量设置为本地函数,我该如何逃避这个问题?

    我一直坚持使用 bash scipt 它应该同时写入标准输出和文件 我正在使用函数和其中的一些变量 每当我尝试将函数重定向到文件并用 tee 在屏幕上打印时 我无法使用在函数中使用的变量 因此它们以某种方式变成本地变量 这是一个简单的例子
  • 在 C# 中查看非托管 dll 上的导出表

    我目前正在尝试创建一个 C 应用程序 该应用程序将允许我查看非托管 DLL 中的导出表 我的问题是 一旦我获得了所需的所有指针 我不知道如何循环访问 API 为我提供的信息 这是我现在所拥有的 using System using Syst
  • Gtk+3 &C & Glade 问题

    我尝试在 Linux 上用 C 和 Glade 制作一个简单的 Gui 程序 我编写了一个简单的程序并用 Glade 设计了一个窗口 当我运行代码时 它说 gtk test 23026 Gtk CRITICAL gtk widget sho
  • Linux CFS 调度程序代码在哪里?

    我有3 13版本的完整linux源代码 我试图找到 CFS 调度程序的源代码 根据流行书籍 它应该驻留在 kernel sched c 中作为基本调度程序代码 而 kernel sched fair c 专门针对 CFS 代码 我刚刚在 3
  • 对V4L2的一个误解

    我在 C 程序中的缓冲区大小方面遇到了一个小问题 我使用 V4L2 从相机中抓取 YUYV 图像 有一个示例here http linuxtv org downloads v4l dvb apis capture example html
  • Linux中根据USB VID:PID获取设备路径

    如果我插入一个设备 比如说 dev ttyUSB0我想知道号码0基于其 VID PID 通过lsusb 我怎样才能在 C Linux 中做到这一点 我有这个代码来查找一台打印机设备 如果有帮助的话 int printer open void
  • 在 Linux 内核中使用断言

    我有一个问题assert 在Linux中 我可以在内核中使用它吗 如果不是 例如 如果我不想输入 NULL 指针 您通常会使用什么技术 对应的内核宏是BUG ON and WARN ON 前者适用于当您想让内核恐慌并使系统崩溃 即不可恢复的
  • Tensorflow推荐的系统规格?

    我开始在我的 RHEL 6 5 机器上安装 Tensorflow 但事实证明 Tensorflow 需要 glibc gt 2 17 而 rhel 6 5 上默认的 glibc 是 2 12 我想知道是否有人可以帮助我了解张量流的最低 推荐
  • Visual C++ MFC 中窗口启动时的事件顺序

    假设我有一个从 CWnd 派生的类 它具有事件处理函数OnPaint OnCreate and OnSize 如您所知 所有这些都是在窗口启动时发生的 但我想看看它们之间的顺序是什么 例如 当我在其中一个中设置断点时 在结束函数后 控制不会
  • 无法使用 linux perf 对硬件缓存事件进行采样

    由于某种原因 我无法采样 perf record 硬件缓存事件 perf record e L1 dcache stores a c 100 sleep 5 perf record Woken up 1 times to write dat
  • SDL - 窗口不显示任何内容

    我正在执行 SDL C 的第一步 并从 www sdl org 上学习了一些教程 但有一个问题 我已经在我的 Linux Mint 系统上安装了 SDL2 编译了教程代码 ifdef cplusplus include
  • 在 Windows 中更改文件所有者

    Windows下有没有类似Linux的APIchown http google com search q man 2 chown 摘自这里 http www perlmonks org node id 70562 http www perl
  • 将.exe文件嵌入到C++程序中?

    我编写了一个 C 程序 我想在其中执行第二个程序 这是一个 exe 文件 问题是我想将我的程序作为一个文件共享给其他人 当我在互联网上搜索时 我找到了这个解决方案 只需将第二个 exe 文件作为二进制资源存储在主文件中 exe 在编译时使用
  • 使用脚本清除 Internet Explorer 6.0 浏览历史记录

    我使用以下脚本删除 IE 7 0 中的浏览历史记录 RunDll32 exe InetCpl cpl ClearMyTracksByProcess 255 但现在我需要一个脚本来清除 IE 6 0 中的浏览历史记录 我收到一条错误消息 缺少
  • 如何使用 C# 更改 Windows 配色方案?

    如何使用 C 以编程方式更改配色方案 我想将配色方案更改为 Windows Vista Basic 或 Windows 7 Basic 我怎样才能做到这一点 谢谢 尼基尔 您可以使用 SetSystemVisualStyle 方法更改系统的
  • 如何在没有驱动的情况下从USB读取数据?

    我们正在创建带有 GPS 接收器和 PC 的小型系统 我们想测试我的 GPS 接收器 我们不想一开始就找司机 首先我想测试我的电路是否工作 GPS IC 已设置为输出 NMEA 语句 我们想要一个只从 USB 端口读取数据并将其打印在屏幕上
  • 内核驱动程序从用户空间读取正常,但写回始终为 0

    因此 我正在努力完成内核驱动程序编程 目前我正在尝试在应用程序和内核驱动程序之间构建简单的数据传输 我使用简单的字符设备作为这两者之间的链接 并且我已成功将数据传输到驱动程序 但我无法将有意义的数据返回到用户空间 内核驱动程序如下所示 in
  • linux新手关于嵌入式linux设备驱动的问题

    最近在研究linux驱动 正如我读过的那些文章所说 设备驱动程序模块很可能会根据内核的需要自动加载 因此我想知道内核如何确定为特定设备 声卡 I2C spi 设备 等 我也无法彻底想象内核如何在启动时检测每个硬件设备 与嵌入式linux相关
  • 如何从脚本编辑 /etc/sudoers?

    我需要编辑 etc sudoers从脚本中添加 删除白名单中的内容 假设我有一个可以处理普通文件的命令 我如何将其应用到 etc sudoers 我可以复制并修改它 然后有visudo用修改后的副本替换原始版本 通过提供我自己的脚本 EDI

随机推荐

  • 【面试题】:说一下登录模块的思路以及登录的优化

    1 静态 首先我们要做静态和表单验证 2 密码加密 在输入完手机号和密码后 我们要对密码进行加密 加密的话使用插件md5对密码加密 之后将请求发送到后台 3 封装登录 因为我们在项目里的请求是按模块来进行划分的 所以我们会通过axios方法
  • java数组显示_java数组

    1 package com oracle demo01 2 3 public class MyArray 4 定义一个数组 5 private int intArray 6 定义数组的实际有效长度 7 private int elems 8
  • 多线程事务

    背景介绍 1 最近有一个大数据量插入的操作入库的业务场景 需要先做一些其他修改操作 然后在执行插入操作 由于插入数据可能会很多 用到多线程去拆分数据并行处理来提高响应时间 如果有一个线程执行失败 则全部回滚 2 在spring中可以使用 T
  • html转turndown 踩雷 以及成功方案 (vue2 + tinymce富文本框)

    showdown 这里使用showdown转换 富文本框内所有格式够可以 但是表格不行 表格转换为竖线 内容丢失 如果没有表格需求 可参 注意 这里的this markdown 是在data中声明的 this value为你要转换的html
  • jdbc连接oracle连接重置问题

    error ConnectionProviderFactory initializeConnectionProviderFromConfig 173 Initializing connection provider org springfr
  • 服务器系统的安装方法,服务器的操作系统安装方法

    服务器的操作系统安装方法 内容精选 换一换 如果Windows操作系统云服务器未安装密码重置插件 可以参见本节内容重新设置密码 本节操作介绍的方法仅适用于修改Windows本地账户密码 不能修改域账户密码 Linux操作系统请参见重置Lin
  • K-小千很好奇-(素数)2023河南萌新联赛第(八)场:南阳理工学院

    include
  • MYSQL-ORCALE decode函数在MYSQL中的实现

    一 select ifnull etl filed col mysql中实现oracle的decode函数需要用到三个函数 1 ELT N str1 str2 str3 若N 1 则返回值为 str1 若N 2 则返回值为 str2 以此类
  • 蓝桥杯java基础练习学习。

    一 基础练习 大部分程序来自查阅网络资源总结 1 A B的问题 package Chapter01 import java util Scanner A B的问题 public class Demo01 public static void
  • MPI > Ubuntu22.04安装MPICH4.0.2并行平台

    MPICH4 0 2 MPICH4 0 2 环境 下载 安装 环境变量 测试单机环境 准备多机环境 配置MPI多机环境 MPICH4 0 2 搭建PSRS Parallel Sorting by Regular Sampling 算法运行环
  • 《数据挖掘导论》归纳笔记

    目录 第一章 绪论 第二章 数据 2 0引言 2 0 1数据类型 2 0 2数据的质量 2 0 3使数据适合挖掘的预处理步骤 2 0 4根据数据联系分析数据 2 1数据类型 2 1 1 属性与度量 2 1 2 数据集的类型 2 2数据质量
  • android 内存溢出前退出界面,Android 导航(介绍)页面ViewPager内存溢出解决方法...

    现在基本每个Android App都会标配一个启动介绍的页面 或做产品介绍 或做app功能展示 既然起导航界面 基本思路就是用ViewPager实现 图片引自UI中国一设计师的设计图片 正好这几天在做这个导航界面 我的测试手机是魅族MX3
  • 常见经济指标学习

    央行统计数据 http www pbc gov cn diaochatongjisi 116219 116319 3959050 3959052 index html 资产负债表 可以看出央行在扩表还是缩表 央行中的资产代表着 基础货币 基
  • 2023高频前端面试题总结(附答案)

    html与css 1 img 的title与alt有什么区别 title是提示文本 鼠标放在图片上提示的文字 alt 是图片显示不出来时的文字替代 能显示出来就不用替换 2 label的作用是什么 怎么用 Label与表单input配合使用
  • 无法定位程序输入点于动态链接库怎么办

    在使用笔记本电脑的时候 如果操作不小心误删了某些文件 可能会导致无法定位程序 打开程序时会被提示无法定位程序输入点于动态链接库怎么办 今天 小编就把无法定位程序输入点于动态链接库的解决方法分享给大家 更多一键重装系统教程可参考小白系统网 解
  • OpenCV(三)——图像分割(二)

    目录 4 边缘检测 4 1 图像梯度的概念 4 2 模板卷积和梯度图的概念 4 3 梯度算子
  • KylinOS-Server定制制作属于自己的ISO镜像文件

    1 准备 镜像文件 Kylin Server 10 SP1 Release Build20 20210518 x86 64 iso 然后安装在服务器上 用来定制ISO的服务器 根据自己的需求选择安装 我这里选择的是GUI安装 2 安装制作I
  • 前端ps基本操作

    在还原设计时 我们需要使用 photoshop打开sd格式的设计 作为的工程师 我们不要太多的ps技巧 只需要了 一些简单的基本操作即可 1 alt 滚轮缩放放图片 2 空格 鼠标左健拖动图片 3 shift m切换选取工具 使用鼠标左键选
  • ApplicationListener--- Spring源码从入门到精通(二十九)

    上篇文章说了bean对象创建之前调用的两个方法 BeanDefinitionRegistryPostProcessor Spring源码从入门到精通 二十八 这篇文章主要介绍spring监听事件源码及实例解析 ApplicationList
  • 怎么在Windows下使用Makefile文件

    推荐阅读 virtio net 实现机制 一 图文并茂 浅析linux内核网络协议栈 linux bridge 深度解析linux内核模块编译makefile 前言 如果熟悉在Linux开发的话 肯定知道Makefile文件的用处 它给我们