Windows 交叉编译之 make

这篇具有很好参考价值的文章主要介绍了Windows 交叉编译之 make。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

如果你需要了解其它安装方式,可以关注本公众号,查看该推文《在 Windows 中怎么安装 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》文内有详细介绍。文章来源地址https://www.toymoban.com/news/detail-579411.html

到了这里,关于Windows 交叉编译之 make的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【交叉编译踩坑指北(一)】windows10下Vscode与Cmake编译生成文件

      工具链版本如下 C:UsersLenovocmake -version cmake version 3.24.2 C:UsersLenovomingw32-make -v GNU Make 4.2.1 Built for x86_64-w64-mingw32   若没有以上工具则进行安装,将bin文件加入到环境变量中, 注意:有的交叉编译器在安装时选择自动加入环境变量可能并不会加入,还是需要手动加入环

    2023年04月15日
    浏览(40)
  • Windows平台visual studio与树莓派跨平台交叉编译opencv

    由于架构差异,opencv在Windows平台下编译的程序无法直接移植到树莓派环境使用,所以需要进行Cmake和跨平台的交叉编译。网上包括官方文档很多足够参考,但配置过程中依然会出现个性问题,以下是本人基于windows下使用visual studio2017集成开发环境进行交叉编译环境配置过程中

    2024年04月11日
    浏览(34)
  • Linux(Ubantu)交叉编译生成windows(32位,64位)可执行程序和库

    机缘巧合下收到了这个小任务. 先是找了下资料发现过去的都是关于mingw32. 教程的做法: 增加个源 (trusty 是linux发行的版本标识,比如22.04是 jammy 更新源 下载mingw32. 结果发现在源里根本找不到 mingw32 报错 Unable to locate package mingw32 最后发现 ubantu高于15.04的版本 mingw32不可用 ,这也

    2024年01月21日
    浏览(32)
  • Powershell删除文本指定内容所在行以下内容

    需求:批量获取文本指定内容所在行以下内容(含当前行)   解决方案:使用Powershell脚本处理   案例: 获取当前文件夹下所有txt文件 含文本\\\"4\\\"所在行 以下内容(含当前行) 如果有多行包含文本\\\"4\\\",取第一个所在行以下内容(含当前行)   1.查看当前文件夹内容   2.右键执

    2024年01月20日
    浏览(28)
  • 【error】svn 清理以下路径失败 原始内容不存在

    目前我们这边的内网代码是通过 TortoiseSVN 进行版本管理的,平时用着也挺好的,没碰到什么大问题。 但是,今天碰到了一个比较棘手的问题,在这里做一下记录,以方便自己和有需要的朋友在之后碰到该类问题时有个参考。 具体的错误现象如下图所示: 导致上述现象的步骤

    2024年02月15日
    浏览(21)
  • ARM交叉编译入门及交叉编译第三方库常见问题解析

    交叉编译简单说来,就是编译成果物的地儿不是你运行这个成果物的地儿。最常见的场景,就是我们要编译一个 ARM版本 的可执行程序,但我们编译这个 ARM版本 可执行程序的地方,是在一个 x86_x64 的平台上。 绝大部分的原因,是目标平台不具备编译成果物的算力。具体说来

    2023年04月26日
    浏览(77)
  • 【交叉编译环境】安装arm-linux交叉编译环境到虚拟机教程(简洁版本)

    就是看到了好些教程有些繁琐,我就写了一个 我这个解压安装的交叉编译环境是Linaro GCC的一个版本,可以用于在x86_64的主机上编译arm-linux-gnueabihf的目标代码 步骤来了 在你的Ubuntu系统中 创建一个目录 ,例如/usr/local/arm,然后将下载好的gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueab

    2024年02月03日
    浏览(32)
  • OpenHarmonyllvm交叉编译工具链编译介绍

    1.1 工具链下载 1.2 环境配置 下载 clang+llvm-10.0.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz 为 github 网址,当前已经下载了,可以直接使用 1.3 安装依赖 1.3.1 基础组件安装 1.4 工具链编译 1.4.1 clang15.0.4 版本全量编译 1.4.2 clang15.0.4 版本不编译 windows 平台 1.4.3 clang12.0.1 版本全量编译 【Note】 :该

    2024年01月25日
    浏览(24)
  • 跨平台编译go(交叉编译)

    以将一个简单的go http 部署到docker为例! Dockerfile文件 docker build . -t goweb_app docker run -p 8888:8888 goweb_app 在最终的镜像中是不需要go编译器的,也就是说只需要一个运行最终二进制文件的容器即可。 Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序。 golang中跨平台

    2024年02月07日
    浏览(64)
  • 编译opencv-3.4.5 [交叉编译]

    在unbuntu20.04环境下编译opencv3.4.5, cmake 版本:3.27.4 gcc 版本:11.4.0 g++版本:11.4.0 在此环境下编译opencv4.5.4正常。 1. 编译时遇到的问题 (1) Built target libprotobuf make: *** [Makefile:163:all] 错误 2 make时用suod:     sudo make -j4 (2) [ 30%] Linking CXX static library ../../lib/libopencv_core.a [ 30

    2024年02月07日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包