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
%.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 交叉編譯器版本: