Windows 交叉編譯之 make

来源:https://www.cnblogs.com/englyf/archive/2023/07/19/17564517.html
-Advertisement-
Play Games

以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接[ 微信公眾號「ENG八戒」](https://mp.weixin.qq.com/s/w8YV_TUb4QwsgChu3AspHg)[https://mp.weixin.qq.com/s/w8YV\_TUb4QwsgChu3AspHg](https ...


以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「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》文內有詳細介紹。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 引言 **yield**關鍵字是 C# 中的一種語言特性,用於在枚舉器中簡化迭代器的實現。它使得開發人員可以通過定義自己的迭代器來簡化代碼,而不必手動實現 IEnumerable 和 IEnumerator 介面。 使用 `yield` 關鍵字,可以將迭代器中的值一次一個地返回,而不必使用一個 ...
  • # 基於Avalonia 11.0.0+ReactiveUI 的跨平臺項目開發1-通用框架 ### Avalonia簡介: Avalonia是.NET的一個跨平臺UI框架,提供了一個靈活的樣式系統,支持廣泛的操作系統,如Windows、Linux、macOS,並對Android、iOS和WebAss ...
  • 本文介紹了C#面向對象編程語言的三個基礎特征:封裝、繼承和多態。其中,封裝可以通過public、private、protected、internal等關鍵字來實現,目的是保護程式內部數據的完整性;繼承可以幫助實現基類的內容復用,但也要結合場景使用;多態是指相同類型對象調用相同方法卻表現出不同行為,使... ...
  • ###內置日誌用法: 1. 引入**Microsoft.Extensions.Logging**命名空間:用於定義和實現日誌記錄功能 2. ILogger介面 a. 內置日誌系統的主要介面,用於記錄日誌信息,可以通過一來註入將ILogger實例註入到記錄日誌的類中,並使用它來記錄不同級別的日誌消息 ...
  • # 什麼?博客園主題比我的個人博客好看?😮 # 夢開始的地方🛸 最近逛博客園,發現我的園子還挺好看,但是還不夠好看,所以通過我百度發現SimpleMemory主題還可以繼續添加新的東西,當然這些東西不一定非得用SimpleMemory主題才行,但是搭配SimpleMemory主題是真的好看呀(比 ...
  • 前段時間小編檢查同事代碼,發現居然寫的太複雜看不太懂,代碼命名不規範,重覆冗長代碼一堆,這時候就可以通過重構來改進代碼的質量。代碼重構是提高代碼質量和可維護性的關鍵過程,它旨在通過優化代碼結構和設計來提高代碼的可讀性、可理解性和可擴展性。本文講述在C#中重構代碼的幾個案例,供大家參考。 **1、命名 ...
  • ## 一:背景 ### 1. 講故事 前幾天寫了一篇 `如何洞察 .NET程式 非托管句柄泄露` 的文章,文中使用 WinDbg 的 `!htrace` 命令實現了句柄泄露的洞察,在文末我也說了,WinDbg 是以侵入式的方式解決了這個問題,在生產環境中大多數情況下是不能走附加進程的模式,所以這也是 ...
  • 文章代碼分析基於linux-5.19.13,架構基於aarch64(ARM64)。 # 1. 前言 複雜IC內部有很多具有獨立功能的硬體模塊,例如CPU cores、GPU cores、USB控制器、MMC控制器、等等,出於功耗、穩定性等方面的考慮,有些IC在內部為這些硬體模塊設計了複位信號(res ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...