1. 程式人生 > >Makefile萬能寫法(gcc程式以及arm-linux-gcc程式)-轉

Makefile萬能寫法(gcc程式以及arm-linux-gcc程式)-轉

在linux下使用gcc 編譯時,Makefile的萬能寫法 ,每次只需更改要生成的目標檔名稱(test)儘可:

1

2

3

4

5

6

7

objs := $(patsubst %c, %o, $(shell ls *.c))

test.all:$(objs)

gcc -o [email protected] $^

%.o:%.c

gcc -c -o [email protected] $<

clean:

rm -f  *.all *.o

在arm交叉編譯時的makefile的萬能寫法,只需更改int.bin,以及int_elf,int.dis名稱即可

1

2

3

4

5

6

7

8

9

10

11

objs := $(addsuffix .o, $(basename $(shell ls -U *.S *.c)))

int.bin: $(objs)

arm-linux-ld -Ttext 0x00000000 -o int_elf $^

arm-linux-objcopy -O binary -S int_elf [email protected]

arm-linux-objdump -D -m arm int_elf > int.dis

%.o:%.c

arm-linux-gcc -Wall -O2 -c -o

[email protected] $<

%.o:%.S

arm-linux-gcc -Wall -O2 -c -o [email protected] $<

clean:

rm -f *.bin *_elf *.dis *.o

更多Makefile學習可百度:GUN MAKE 手冊

Makefile的規則 

1

2

3

4

Makefile的規則:

目標檔案:依賴檔案

target ... : prerequisites ..

command

  target要求  

    1、要生成的可執行檔案或obj檔案;

    2、也可以是一個執行的動作名稱:clean

  Makefile執行規則:  

    1、執行make時,僅當hell.c檔案比hello.o檔案更新,才會執行命令:arm-linux-gcc -o hello.o hello.c;

    2、如果沒有hello.o檔案也會執行

    3、執行 make clean 時,由於clean 沒有依賴,它的命令也會被強制執行

makefile賦值:

Makefile中的"="":="、"?="和"+="區別是:
    "="是直接給變數賦值。
    ":="是將":="右邊中包含的變數直接展開給左邊的變數賦值。
    "?="是在該變數沒有被賦值 的情況下為其賦值。
    "+="是給該變數追加值。
  例:
    a = 1
    b = 2
    c := $(a) 3
    d = 4
    d ?= 5
    b += 6
  結果:
    a=1
    c=1 3
    d=4
    b=2 6

使用makefile 編譯c程式:

  1、一些make函式的巧用

    1、$(patsubst pattern, replacement,text) 

      原理:用replacement替換text中符合格式"pattern" 的字

      如:$(patsubst %.c, %.o, b.a.c hello.c helloworld.c)

        結果為字串:b.a.o hello.o helloworld.o

    2、$(shell command arguments) 

    3、$(basename names.....)

    原理:抽取除"names...."中每一個檔名中除字尾外的一切字元

    比如:

    $(basename head.S hello.c helloworld.c)

    結果為:head hello helloworld

    4、$(addsuffix suffix,names...) 

      如:$(addsuffix .c, head hello helloworld)

      結果為:head.o hello.o hello.o helloworld.o

在linux中編譯c程式時寫make檔案就有一些技巧了

在 arm 嵌入式交叉編譯時,就可以這樣編寫Makefile。相應的程式名稱相應修改

1

2

3

4

5

6

7

8

9

10

11

objs := $(addsuffix .o, $(basename $(shell ls *.S *.c)))

int.bin: $(objs)

arm-linux-ld -Ttext 0x00000000 -o int_elf $^

arm-linux-objcopy -O binary -S int_elf [email protected]

arm-linux-objdump -D -m arm int_elf > int.dis

%.o:%.c

arm-linux-gcc -Wall -O2 -c -o [email protected] $<

%.o:%.S

arm-linux-gcc -Wall -O2 -c -o [email protected] $<

clean:

rm -f *.bin *_elf *.dis *.o

相關推薦

Makefile萬能寫法(gcc程式以及arm-linux-gcc程式)-

在linux下使用gcc 編譯時,Makefile的萬能寫法 ,每次只需更改要生成的目標檔名稱(test)儘可: 1 2 3 4 5 6 7 objs := $(patsubst %c, %o, $(shell ls *.c)) test.all:$(objs) gcc -o [e

Android 執行 C/C++程式 (使用 arm-linux-gcc 交叉編譯環境)

這個其實就是個人的一個小小的興趣,用C/C++寫一個小程式放在Android的系統中,然後用Java寫一個Android的UI程式來呼叫這個C/C++的程式。這裡總結了實現這個功能的一些步驟和遇到的問題。蠻有意思的。 這裡參考了下面兩篇博文,主要是關於搭建arm-lin

如何解決 arm-none-linux-gnueabi-gcc -v和arm-linux-gcc 沒有那個檔案或目錄

最近弄了個4412的板子(友善之臂的Tiny4412增強版),準備搞搞android,開發伺服器用的是Ubuntu12.04-64bit版本(對於Android 2.3.X和更新的版本,需要64位的系統,之前的老版本2.2以下(包括2.2)可以 在32位版本上編譯,另外不推薦虛擬機器,因為官網上寫的虛擬機

配置arm-linux-gcc教程以及可能遇到的問題

================================================================= 內容出自網際網路及自行新增改良,已經過測試。 測試環境:Ubuntu16.04 x86/x64、Ubuntu17.04x6

arm-linux-gcc環境搭建

over asp gpg linux 4.4 mkdir isp play gin 安裝libncurses5-dev 使用apt-get安裝apt-get install libncurses5-dev 安裝arm-linux-gcc 參考:Ubuntu 12.0

arm-linux-gcc常用參數講解 gcc編譯器使用方法

傳遞 stat 插入 pic 排錯 編譯 process 引號 符號表 為了查找方便,從一路前行搬過來 我們需要編譯出運行在ARM平臺上的代碼,所使用的交叉編譯器為 arm-linux-gcc。下面將arm-linux-gcc編譯工具的一些常用命令參數介紹給大家。在此之前

在Ubuntu上安裝arm-linux-gcc的問題

編譯 根據 blog ima linux bash ubun 不能編譯 部分 由於之前將Ubuntu的更新關掉了,所以導致我下載32位兼容包一直出錯。 在arm-linux-gcc 安裝之後,還不能編譯程序的話,首先看自己的系統是多少位的,因為網上大部分的安裝包都是32位

[Mini2440 - 008] 安裝 arm-linux-gcc 交叉編譯器

加載 pan bz2 bash 單個 ubun 提示 owb 下載 一、相關資料獲取   我個人在學習 mini2440 開發板時是跟著韋東山老師的第一期視頻學習的,視頻和資料我稍作修改了一下,只是改變了一下文件組織結構。資料獲取請訪問百度雲鏈接。   鏈接:http://

Ubuntu 編譯 ARM-Linux-Gcc 工具鏈 -- 通過crosstool-NG制作工具鏈

rac export 項目 isa 查看 col pat ftp 芯片 1.手動下載制作過程中所需要的包,節省時間 所用包如下(不同版本所有包版本有所不同) libtool-2.4.6 linux-3.2.87 gmp-6.1.2 mpfr-3.1.5 i

Ubuntu 編譯 ARM-Linux-Gcc 工具鏈 -- 安裝crosstool-NG

oss con 配置 ons efi wget port inux tar 一、安裝crosstool-NG 1、建立arm-linux-tools目錄,並進入該目錄 $ mkdir arm-linux-tools $ cd arm-linux-tools

交叉編譯環境在root用戶下找不到arm-linux-gcc問題:

root GC 路徑 bashrc 問題 編譯 用戶 環境變量 重新 原因是:環境變量(交叉編譯路徑)可能是在普通用戶下添加的,所以在root用戶下創建的文件使用arm-linux-gcc編譯的時候,找不到arm-linux-gcc。 解決辦法:找個終端:sudo -s  

嵌入式交叉編譯環境arm-linux-gcc環境搭建

arm linux gcc 嵌入式交叉編譯環境 準備工具安裝目錄 可以去官網下載對應系統版本的arm-Linux-gcc。將壓縮包arm-linux-gcc-4.4.3.tar.gz存放在一個目錄下。 .tar.gz 和.tgz 解壓:tar zxvf FileName.tar.gz 壓縮:t

ubunutu16.4 64位安裝arm-linux-gcc交叉編譯器

網上有很多的安裝交叉編譯的方法,但是照做後,發現arm-linux-gcc發現提示   那麼怎麼處理呢? 接下來一步步記錄下吧! 這裡是使用的是arm-linux-gcc-4.5.1在友善之壁官網可以下載。 1:將arm-linux-gcc-4.5.1-v6-vf

debian9安裝arm-linux-gcc交叉編譯器,並安裝windows和linuxs共享檔案的samba伺服器

1,首先下載arm-linux-gcc安裝包,http://arm9.net/download.asp 解壓:tar -zxvf  *.tar.gz 2,修改環境,使得系統能夠識別arm-linux-gcc, 方法1:##sudo vi /etc/environment 方

arm-linux-gcc 常用引數講解 gcc編譯器使用方法

我們需要編譯出執行在ARM平臺上的程式碼,所使用的交叉編譯器為 arm-linux-gcc。下面將arm-linux-gcc編譯工具的一些常用命令引數介紹給大家。 在此之前首先介紹下編譯器的工作過程,在使用GCC編譯程式時,編譯過程分為四個階段: 1. 預處理(Pre-Processing

安裝了arm-linux-gcc但是找不到

最近在製作根檔案系統的時候,使用命令arm-linux-gcc -v,卻提示以下問題, 開始還以為是檔案交叉編譯器的配置路徑不對,查看了,路徑也是對的,但就是出現這個問題 bash: /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-

arm-linux-gcc編譯環境搭建

記錄下來,方便以後查詢 1.解壓 sudo tar -xvlf arm-linux-gcc-4.4.3.tar.gz 2.建立目錄 sudo mkdir /usr/local/arm_4.43 3.把解壓的東西移動到剛剛新建的目錄 sudo mv /opt/F

arm-linux-gcc編譯時出現的一些小插曲-----64位系統需要32位的庫

最近由於工作的需要,重新弄起arm-linux-gcc編譯。離上一次弄這些有整整10年了。 我是在一臺64位的機器上實機安裝的 centos7 發行版,系統和交叉編譯器的安裝過程自是沒話說,問題出在使用arm-linux-gcc編譯 arm程式時, $ arm-linu

)如何將arm-linux-gcc編譯的動態連結helloworld在Android上執行

如何將arm-linux-gcc編譯的動態連結helloworld在Android上執行 https://blog.csdn.net/kangear/article/details/78537352 標題起得有點長,但是少一個字都不足以描述清楚我要說的。Android上要用C程式無非兩種方法

搭建完整的arm-linux-gcc等交叉編譯環境

https://www.cnblogs.com/uestc-mm/p/6656325.html 安裝環境        Linux版本:Ubuntu 12.04    核心版本:Linux 3.5.0   交叉編譯器版本: