當前位置:首頁 » 編程軟體 » 使用makefile編譯

使用makefile編譯

發布時間: 2025-04-12 06:20:39

『壹』 如何使用自己的makefile編譯android ndk項目

android ndk提供了一套自己的makefile管理方式,要將源碼項目移植到android平台,需要按照android的makefile規則編寫makefile,還要按android的規則部署源碼目錄,對一個有自己的makefile管理方法的大型項目來說,只是做一下makefile遷移工作就是一件很麻煩的事。
其實android ndk上的編譯說到底也就是交叉編譯,只要配置好交叉編譯工具鏈,使用原有的makefile也是可以編譯出在android運行的c、c++程序的。
以android-ndk-r4-crystax的ndk版本為例:
編譯器路徑 android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin
名稱前綴 arm-eabi-
頭文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include
庫文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib
你可以試一下上面的配置,如果編譯鏈接都沒有問題,可以adb push到android設備上運行看看,什麼結果?
有點崩潰,根本運行不起來,你也許想試試看android自帶的ndk例子,確實是能夠運行的,問題在哪兒呢?
只是正確配置了編譯器、頭文件、庫文件還不夠,還需要配置編譯、鏈接的參數,android例子中編譯鏈接的參數是什麼呢?你也許想深究一下android的makefile,可是不久你會發現那是更崩潰的事情,裡面用了很多的make腳本函數。其實android的makefile是可以把執行的詳細命令輸出來的,只要make的時候加上V=1即可。可以看到確實帶了很多參數
編譯參數:
-fpic
-mthumb-interwork
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-Wno-psabi
-march=armv5te
-mtune=xscale
-msoft-float
-mthumb
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-Wa,--noexecstack
-D__ARM_ARCH_5__
-D__ARM_ARCH_5T__
-D__ARM_ARCH_5E__
-D__ARM_ARCH_5TE__
-DANDROID
鏈接參數:

-nostdlib
-Bdynamic
-Wl,-dynamic-linker,/system/bin/linker
-Wl,--gc-sections
-Wl,-z,noreloc
-Wl,--no-undefined
-Wl,-z,noexecstack
-L$(PLATFORM_LIBRARY_DIRECTORYS)
crtbegin_static.o
crtend_android.o
這其中鏈接參數中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最關鍵的,android使用了自己的進程載入器,並且自定義了c運行時的啟動結束。難怪先前編譯的進程啟動不了。

『貳』 在VC里如何用Makefile文件編譯

在Visual C++中編譯使用Makefile文件,首先打開命令提示符(cmd.exe)或在Windows 9x中使用command.com,然後進入Visual C++的bin目錄,運行vc-vars32.bat設置環境變數。之後進入Makefile所在的目錄,並使用nmake /f makefile進行編譯。從sourceforge下載的libjpeg源代碼包含了一個makefile.vc文件,通過nmake /f makefile.vc [nodebug=1]可以編譯靜態庫,但若需編譯成dll,以便在如emacs等程序中使用,則需對makefile.vc和jmorecfg.h文件進行修改。

在makefile.vc文件中,需添加編譯dll的規則如下所示:

libjpeg.lib: $(LIBOBJECTS)

$(RM) libjpeg.lib

lib -out:libjpeg.lib $(LIBOBJECTS)

添加以下行:

libjpeg.dll: $(LIBOBJECTS)

$(RM) libjpeg.dll

link -dll -out:libjpeg.dll $(LIBOBJECTS)

在jmorecfg.h中添加:

#define _WIN32_

#define JPEG_DLL

修改完成後,使用nmake /f makefile.vc nodebug=1即可編譯。

將makefile復制為.mak文件,通過Visual C++打開即可,.mak文件實質上就是一個makefile文件,它能夠指定編譯的具體命令,以及必須先設置VC命令行環境。

vcvars32.bat用於設置環境變數,在Visual C++ 98的bin目錄下執行nmake /f XXXX.mak,如果有makefile文件,則直接使用nmake即可。

這種方法適用於需要自定義編譯規則或特定環境配置的情況,通過修改makefile文件,可以實現更靈活的編譯方式。

『叄』 剛下的一個大型C程序包裡面有很多頭文件C文件還有makefile文件,請問怎樣編譯運行這個文件啊!

進入包含C程序包的目錄後,可以使用make命令來編譯這個程序包。Makefile文件通常會定義編譯規則,包括如何編譯各個源文件以及鏈接所需的庫文件。首先確保你的開發環境已經安裝了必要的編譯工具,如GCC。然後在程序包的根目錄下輸入make命令,Make工具會根據Makefile文件中的規則自動編譯所有需要的源文件。如果Makefile中定義了安裝規則,編譯完成後還可以通過make install命令將程序安裝到系統目錄中。

編譯過程中可能會遇到各種錯誤,這些錯誤信息通常會幫助你定位問題所在。常見的錯誤包括未找到頭文件、鏈接錯誤等。對於頭文件未找到的問題,確保包含了所有必要的頭文件路徑;對於鏈接錯誤,檢查Makefile中的庫路徑和庫名是否正確。如果需要手動編譯而不是使用make,可以通過編譯器命令,如gcc,來編譯各個源文件。例如,如果源文件名為main.c,可以使用命令gcc main.c -o main來編譯並生成可執行文件。

編譯完成後,生成的可執行文件通常會在當前目錄下。可以直接運行這個可執行文件來測試程序的功能。如果Makefile中定義了運行測試的腳本或者命令,也可以通過make run或者make test來執行。不過,最好還是直接運行生成的可執行文件,以確保程序按預期運行。

如果編譯或運行過程中遇到問題,可以查閱Makefile文件中的注釋或者搜索相關錯誤信息,通常能找到解決辦法。如果問題依然無法解決,可以考慮查看程序包的README文件,裡面可能包含了編譯和運行的詳細說明。

總之,使用make命令是最簡便的方式編譯大型C程序包。如果make命令無法滿足需求,也可以通過手動編譯來完成編譯過程。無論是哪種方式,正確處理編譯和運行過程中的錯誤信息都是關鍵。

熱點內容
閃迪存儲卡g 發布:2025-04-25 23:24:51 瀏覽:211
c語言和It 發布:2025-04-25 23:18:22 瀏覽:692
c語言簡單程序設計 發布:2025-04-25 23:13:14 瀏覽:593
c語言編程思路 發布:2025-04-25 23:08:08 瀏覽:341
安卓開發存儲空間多少則為不足 發布:2025-04-25 22:54:55 瀏覽:541
視頻課堂源碼 發布:2025-04-25 22:52:55 瀏覽:982
庭院植物配置需要什麼 發布:2025-04-25 22:46:47 瀏覽:985
存儲卡ntfs 發布:2025-04-25 22:42:57 瀏覽:76
編譯馬列著作的專門機構是編譯局 發布:2025-04-25 22:32:57 瀏覽:779
小米平板怎麼刷安卓版 發布:2025-04-25 22:19:44 瀏覽:862