在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Makefile 快速入門
多分辨率適配常用目錄
Android 開發(fā)環(huán)境(Eclipse+ADT+Android 5.0)
Android 原型設(shè)計工具探索
Makefile 快速入門
Android Studio的NDK開發(fā)
人臉檢測-靜態(tài)
getprop 與 dumpsys 命令
Maven 編譯開源二維碼掃描項目 zxing
畫布 Canvas
組合控件
Linux 下的模擬器硬件加速
讀取 Excel
android.hardware.camera2 使用指南
橫豎屏切換
Ubuntu 下切換 JDK 版本
拍照和錄像 with Camera
文本與布局
按鈕控制 ViewPager 的左右翻頁
用 TableLayout 偽裝表格顯示數(shù)據(jù)
Preference Activity 使用詳解
模擬器如何重啟?試試 Genymotion!
獲得屏幕物理尺寸、密度及分辨率
語音識別
了解 native activity
Android Studio 導入第三方類庫、jar 包和 so 庫
啟動另一個 App/apk 中的 Activity
APK 簽名
兩個開源的圖表/報表控件
android studio 導出 jar 包(Module)并獲得手機信息
圖片的 Base64 編解碼
混淆與反編譯
Android Studio 和 Gradle
Android 5.1 SDK 下載與配置
persistableMode 與 Activity 的持久化
adb 取出安裝在手機中的 apk
Android Studio 中的源代碼管理
Handler 使用中可能引發(fā)的內(nèi)存泄漏

Makefile 快速入門

目錄(?)[+]

目標

通過一篇文章的介紹達到能夠編寫簡單 Makefile 以及能夠看懂普通的 Makefile 之目的。

make 簡介

make 是一個老牌的構(gòu)建(build)工具,1970年問世以來已經(jīng)度過了45年的時光而魅力不減,這在技術(shù)發(fā)展日新月異的今天是不可思議的。make 在大型的軟件項目中發(fā)揮著巨大作用。我是在學習 Linux kernel 時才第一次接觸它,Android 系統(tǒng)也是用 make 和 python 等腳本一起構(gòu)建系統(tǒng),所以掌握 make 知識是你邁進這些系統(tǒng)的第一道坎。你一定要給予 make 足夠的重視,不要以為掌握了 C/C++、Java 這些主力編程語言就可以掌控世界,當你迷失在海量的 Makefile 以及各種 .py,.sh 時,沒有構(gòu)建系統(tǒng)的知識是令人抓狂的。

make 的優(yōu)點是你可以把程序中各元素之間的關(guān)系告訴 make,之后 make 會根據(jù)這些關(guān)系和時間戳去判斷應該重新編譯哪些步驟以產(chǎn)生你需要的程序。這就是我們常說的增量編譯。

一個最簡單的 Makefile

通常 make 是根據(jù) Makefile/makefile 執(zhí)行工作的,Makefile 中包含了一組用來編譯程序的規(guī)則。一項規(guī)則可分為三個部分:目標(target)、必要條件(prereq)以及所要執(zhí)行的命令(command)。

    target: prereq1 prereq2
        commands

C 文件只有一個 main.c

    #include <stdio.h>

    int main(int argc, char** argv) {
            printf("hello, makefile!\n");
    }

第一個 Makefile

    #first makefile
    hello-makefile: main.c
           gcc -o hello-makefile main.c

解讀如下:

這個 Makefile 是由一項任務(規(guī)則)組成,目標是一個叫作 hello-makefile 的可執(zhí)行文件,必要條件是 main.c 文件,而命令是一個 gcc 的編譯命令。

執(zhí)行結(jié)果如下:

    $ make
    gcc -o hello-makefile main.c

第二個 Makefile

    #final target
    hello-makefile: main.o
            gcc -o hello-makefile main.o
    #main.o
    main.o: main.c
            gcc -c main.c

解讀如下:

將上述步驟分解成兩步,為了生成 hello-makefile 需要依賴一個條件是 main.o,而接著將 main.o 作為目標再寫一條規(guī)則。通常一個 Makefile 就是由這樣多個不同的規(guī)則組合而成。

執(zhí)行結(jié)果如下:

    $ make
    gcc -c main.c
    gcc -o hello-makefile main.o

Makefile 基本語法

從上而下的結(jié)構(gòu)

就像上面的 Makefile 那樣,默認從最上層的工作目標(通常稱為 all)開始工作,把有些工作目標如 clean 工作放在文件的最底部。

特殊符號

井號(#)用來表示注釋

反斜杠(\)當作續(xù)行符

通配符

與常用 shell 通配符一致。

星號(*)代表任意數(shù)量的任意字符,問號(?)代表一個任意字符。

.PHONY

假想工作目標,并且可以避免名字沖突。出現(xiàn)在如下場合:

    .PHONY: clean
    clean:
            rm -f *.o

常用的 .PHONY如下:

    all        執(zhí)行編譯應用程序的所有工作
    install    從已編譯的二進制文件進行程序的安裝
    clean      清楚生成的二進制文件
    distclean  清楚所有生成的文件
    TAGS       建立可供編輯器使用的標記表
    check      執(zhí)行與程序相關(guān)的任何測試

變量

    $(variable)
    ${}

變量名稱是單一字符的就不用括號了。

VPATH

告訴 make 如果在當前目錄沒有找到,就去指定的目錄找。比如:

    VPATH = src include

C++ 標示

有時需要輸入一些參數(shù)告訴 gcc 做一些事,比如加入 -I 選項告知啟動隱含編譯規(guī)則:

    CPPFLAGS = -I include

include 關(guān)鍵字

有時需要調(diào)用其他的 makefile,只需要用 include 將其加入就可以了:

    include /home/linc/workspace/lab/OpenCV-android-sdk-2.4.11/sdk/native/jni/OpenCV.mk

接下來

讀讀《GNU Make 項目管理》吧,更深入的知識和經(jīng)驗都可以在書中找到。