1、程式**結構如下
makefile/1.1、需要被編譯的源**如下|--makefile
|--haha.c
`-- hehe.c
$ cat haha.c#include
"stdio.h
"int
main()
$ cat hehe.c1.2、makefile的指令碼如下#include
"stdio.h
"int
main()
$ cat makefile1.3、執行make命令後的編譯結果.phony : dummy
cflags =ldflags =all_files =hehe haha
all : $(all_files)
hehe : hehe.o
gcc -o hehe hehe.o
hehe.o : hehe.c
gcc -c hehe.c -o $@
haha : haha.o
gcc -o haha haha.o
haha.o : haha.c
gcc -c haha.c -o haha.o
clean : dummy
rm -rf *.o
rm -rf $(all_files)
$ makegcc -c hehe.c -o hehe.o
gcc -o hehe hehe.o
gcc -c haha.c -o haha.o
gcc -o haha haha.o
-rwxrwxr-x 1 normal normal 4940這樣我們需要的程式就編譯出來了。檔案結構如下12-11
16:08
haha
-rw-rw-r-- 1 normal normal 72
12-11
16:03
haha.c
-rw-rw-r-- 1 normal normal 872
12-11
16:08
haha.o
-rwxrwxr-x 1 normal normal 4940
12-11
16:08
hehe
-rw-rw-r-- 1 normal normal 72
12-11
16:03
hehe.c
-rw-rw-r-- 1 normal normal 872
12-11
16:08
hehe.o
-rw-rw-r-- 1 normal normal 279
12-11
16:04 makefil
makefile/多出來了4個檔案,haha、haha.o、hehe、hehe.o|--makefile
|--haha
|--haha.c
|--haha.o
|--hehe
|--hehe.c
`-- hehe.o
1.4、執行結果
$ ./hahaha ! ha !
$ ./hehe1.5 執行命令make clean,結果如下he ~ he ~
$ make clean多出來的檔案都被刪除了,接下來對makefile的指令碼檔案進行一下講解。rm -rf *.o
rm -rf hehe haha
2、下面是對makefile檔案的講解
2.1、在make命令執行後,會在當前目錄下搜尋makefile、makefile。如果當前目錄沒有這個兩個檔案的話就會報錯:找不到makefile
$ make2.2、現在把makefile改名,用引數-f 來指定要載入的指令碼檔案也是可以順利編譯的。make: *** 沒有指明目標並且找不到 makefile。 停止。
$ mv makefile realmake2.3、在makefile指令碼中,make會預設尋找第乙個目標進行編譯。比如上面的makefile中,make會從上到下進行掃瞄,當掃瞄到「all :」的時候,終於找到乙個目標了,然後就會對這個目標進行操作。當make發現這個all需要$(all_files)的時候,時候就會去尋找$(all_files)。但是,make在載入指令碼的時候會把all_files變數進行置換為hehe haha,所以換成了尋找hehe和haha進行編譯。當執行hehe的時候又發現需要hehe.o,然後又去尋找hehe.o,如此迴圈尋找吧,直到hehe.c的時候,終於在當前目錄找到hehe.c了,這個呼叫棧才算到頭了。$ make -f realmake
gcc -c hehe.c -o hehe.o
gcc -o hehe hehe.o
gcc -c haha.c -o haha.o
gcc -o haha haha.o
Linux下gcc編譯過程例項講解
本次講解基於c 在ubuntu下編譯一段例項 詳細講解gcc的編譯過程。通過本教程,你將掌握linux下gcc編譯過程和原理。詳見我的部落格 linux下c c 編譯原理及過程 file main.c brief 測試 author zyf date 2020 12 09 23 28 20 vers...
Linux實現自動登入的例項講解
使用expechercxljjbt實現自動登入的指令碼,網上有很多,可是都沒有乙個明白的說明,初學者一般都是照抄 可是為什麼要這麼寫卻不知其然。本文用乙個最短的例子說明指令碼的原理。指令碼 如下 usr bin expect set timeout 30 spawn ssh l username 1...
Linux下安裝Redis及make安裝時所踩的坑
正常安裝步驟如下 root localhost yum install gcc root localhost cd usr local root localhost local wget root localhost local tar xvf redis 6.0.1.tar.gz root loc...