天天看點

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 其實内容可以很複雜,以後有機會的話會在公衆号後續文章繼續講解。

繼續閱讀