Windows 交叉编译之 make

windows,交叉,编译,make · 浏览次数 : 270

小编点评

**Make 是什么** Make 是一个用于控制程序和相关文件生成的工具,它需要辅以 makefile 文件指导生成过程和列出需要的原材料。 **Make 工作过程** * 创建 Makefile 文件 * 使用 makefile 文件指导编译和构建输出文件 * Make 通过比较目标输出文件和输入文件的时间来决定是否需要更新 **Make 的优点** * 提高编译效率 * 不限制源文件的编写语言 * 可用于生成程序、打包、安装、卸载软件包等 **如何使用 Make 在 Windows 平台交叉编译程序** 1. 下载安装包 2. 在工程源文件根目录下创建 Makefile 文件 3. 写入 Makefile 文件,例如: ```makefile output: main.c\tgcc main.c -o output ``` 4. 运行命令行,并输入 `make>makegcc main.c -o output` 5. 编译结束后,拷贝生成的文件 `output` 到目标平台 (Linux) 下运行 `$ ./output hello window cross-compile for linux` **其他资源** * GnuWin32.make 安装指南:点击该链接进入页面,然后找到 Complete package, except sources 把安装文件下载到本地,直接双击执行即会开始安装。 * CMake 简介:本文介绍了 CMake,它可以更方便地管理工程。

正文

以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/w8YV_TUb4QwsgChu3AspHg

Make 是什么

Make 本来是一个在 linux 环境下用于控制程序和相关文件生成的工具。Make 工作过程需要辅以 makefile 文件指导生成过程和列出需要的原材料,比如源文件、依赖库等。有了 makefile 文件,Make 就可以根据输入文件的变更来更新对应的输出程序文件,而不需要完全重新编译输出,提高了编译效率。Make 通过比较目标输出文件和输入文件的时间来决定是否需要更新。

另外 Make 不限制源文件的编写语言。

Make 不仅仅用于生成程序,还用于打包、安装、卸载软件包等。这可以避免系统维护人员了解不必要的细节和在繁琐的操作中浪费时间。是的,细节都在 makefile 文件中,makefile 文件可以指定依赖包的安装卸载先后顺序,这样使得执行过程是完全自动化的。

虽然编写 makefile 文件是费时的,但是如果你的执行过程足够频繁,那么就很值得投入时间编写好 makefile 文件。

如果你是一枚技术狂热者,那么 Make 是你不可多得的工具。

问题来了,如果需要在 Windows 平台交叉编译适用于 Linux 的程序文件,可否也使用 Make ?

当然可以,下面继续看。

安装 make

Windows 平台并没有自带 make,所以需要我们自己配置环境。

配置 make 环境第一步就是下载安装包。下载安装的方式还有很多,比如 GnuWin32.make、Winget、Chocolatey、WSL、MinGW 等等,这里只是介绍使用 GnuWin32.make 这种。

如果你需要了解其它安装方式,可以关注本公众号,查看该推文《在 Windows 中怎么安装 Make ?》有详细介绍。

首先,网上搜索 make for windows

点击该链接进入页面,然后找到 Complete package, except sources

把安装文件下载到本地,直接双击执行即会开始安装。

安装完成后,还需要配置一下系统变量,否则在调用 make 时系统无法找到该执行文件

详细配置过程可参考上面的推文链接,这里从略。

make 编译

在 Windows 这个过程和 Linux 环境下一样,需要先准备一份 Makefile 文件和其它工程文件(比如源文件)。

这里为演示起见,这里创建源文件 main.c

#include <stdio.h>

int main()
{
    printf("hello window cross-compile for linux");
    return 0;
}

然后,在工程源文件根目录下创建 Makefile 文件(注意文件名),文件内容可以如下写

output: main.c
	gcc main.c -o output

由于生成的目标执行文件是要在 Linux 下运行的,这里采用编译器 gcc。同时,指定输出文件为 output。

由于编译是在 Windows 平台,那么编译器 gcc 也需要有对应的 Windows 平台版本。其一般由芯片原厂提供,安装之后也需要配置系统变量以备系统调用。

最后,在 Makefile 文件所在目录运行命令行,并输入命令 make

>make
gcc main.c -o output

编译结束后,拷贝生成的文件 output 到目标平台(Linux)下运行

$ ./output 
hello window cross-compile for linux

当然,makefile 其实内容可以很复杂,以后有机会的话会在公众号后续文章继续讲解。

不过,现如今有了 CMake 可以更方便地管理工程,它会自动生成对应的 makefile 文件。我的很多文章都有介绍过 CMake,其中《一文入门Qt Quick》文内有详细介绍。

与Windows 交叉编译之 make相似的内容:

Windows 交叉编译之 make

如果需要在 Windows 平台交叉编译适用于 Linux 的程序文件,可否也使用 Make ?

如何构建高效、可观的系统「GitHub 热点速览」

经典老项目 system-design 教你如何设计一个健壮的系统,新项目 noodle 教你如何提升教育效率,而后者甚至单日获得了 1,600 star,刚开源就获得了 6k+ 的 star。除了,新老项目的交锋,还有一些能帮上忙的周边工具,比如用来享受游戏编程的 raylib,搞定游戏系统妥妥的;清理的内存的 memreduct,则让你放心使用 Windows 系统。不想搬砖,又得实现需求?也许 MetaGPT 能帮上忙,内置多种工种,随时 cosplay 所需工种。

.NET App 与Windows系统媒体控制(SMTC)交互

当你使用Edge等浏览器或系统软件播放媒体时,Windows控制中心就会出现相应的媒体信息以及控制播放的功能,如图。 SMTC (SystemMediaTransportControls) 是一个Windows App SDK (旧为UWP) 中提供的一个API,用于与系统媒体交互。接入SMTC的好

【转帖】ChatGPT重塑Windows!微软王炸更新:操作系统全面接入,Bing也能用插件了

https://cloud.tencent.com/developer/article/2291078?areaSource=&traceId= 金磊 丰色 西风 发自 凹非寺 量子位 | 公众号 QbitAI 一夜之间,微软彻底重新定义了PC交互。 因为这一次,它把Bing和ChatGPT插件的能

5款开源、美观、强大的WPF UI组件库

前言 经常看到有小伙伴在DotNetGuide技术社区交流群里提问:WPF有什么好用或者好看的UI组件库?,今天大姚给大家分享5款开源、美观、强大、简单易用的WPF UI组件库。 WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。它提供了灵活的布局、

7.6 实现进程挂起与恢复

挂起与恢复进程是指暂停或恢复进程的工作状态,以达到一定的控制和管理效果。在 Windows 操作系统中,可以使用系统提供的函数实现进程的挂起和恢复,以达到对进程的控制和调度。需要注意,过度使用进程挂起/恢复操作可能会造成系统性能的降低,导致死锁等问题,因此在使用时应该谨慎而慎重。同时,通过和其他进程之间协同工作,也可以通过更加灵活的方式,实现进程的协调、交互等相应的功能,从而实现更加高效和可靠的进

C#开发一个混合Windows服务和Windows窗体的程序

很多时候,我们希望服务程序可以直接运行,或者可以响应一些参数,这时候,混合Windows服务和Windows窗体的程序就排上用场了。要实现同时支持Windows服务和Windows窗体,需要在启动的第一步时判断当前运行环境是否为服务模式,可以从以下几个方面进行判断: 当前用户名称:Environme

Windows 7操作系统全面解析与实用技巧

深入介绍Windows 7操作系统的基础知识、功能特性、分类和基本操作技巧,包括核心功能、特征、分类、安装方法、启动、文件管理、个性化设置等方面。旨在帮助用户深入理解Windows 7,并掌握提高工作效率和个性化设置的实用技巧。

三种方法教你下载 Windows 10 和 Windows 11 原生镜像

这篇教程详细介绍了三种下载 Windows 10 和 Windows 11 原生镜像的方法,包括通过微软官网、iTellYou 网站和系统库网站下载,帮助你快速获取所需的操作系统镜像文件。

Windows 下自动预约申购 i茅台

今天分享一个自动预约抢茅子的工具! 前期准备工作: 1.需安装:.Net6 依赖 (根据操作系统选择 x64 或 x86 版本进行下载。) 安装软件 1.软件下来下来之后,解压并进入软件目录,我们双击启动程序 软件界面比较简洁,首页里有点击展开菜单的快捷方式 首先我们先进入【预约项目】菜单界面,先刷