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

Windows 交叉编译之 make

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 这种。

假如你需求了解其它装置方式,能够查阅我的其它文章有详细介绍。

首先,网上搜索 make for windows

Windows 交叉编译之 make

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

Windows 交叉编译之 make

把装置文件下载到本地,直接双击履行即会开端装置。

装置完成后,还需求装备一下体系变量,否则在调用 make 时体系无法找到该履行文件

Windows 交叉编译之 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》文内有详细介绍。