一步一步的写出你自己的makefile文件
生活随笔
收集整理的這篇文章主要介紹了
一步一步的写出你自己的makefile文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
main:main.o add.o sub.ogcc -g main.o add.o sub.o -o main
main.o:main.cgcc -g -c main.c -o main.o
add.o:add.c add.hgcc -g -c add.c -o add.o
sub.o:sub.c sub.hgcc -g -c sub.c -o sub.o
模式規則 %.o:%.c //使用.c文件生成.o文件 后綴規則 .c.o: //使用.c文件生成.o文件
使用的makefile 文件的小結
main:main.o add.o sub.o //生成main可執行文件的方式gcc -g main.o add.o sub.o -o main //命令行有TAB 開始//main依賴于 main.o add.o sub.o main.o:main.c //main.o 生成依賴于 main.cgcc -g -c main.c -o main.o // add.o:add.c add.h //add.o的的生成依賴于add.c add.hgcc -g -c add.c -o add.o sub.o:sub.c sub.hgcc -g -c sub.c -o sub.o .PHONY:clean //顯式的生命 clean 是一個偽目標 //這樣就算是有一個文件命名為clean在執行make clean的時候也不會 make: 'clean' is up to date. main:main.o add.o sub.ogcc -g main.o add.o sub.o -o main main.o:main.cgcc -g -c main.c -o main.o add.o:add.c add.hgcc -g -c add.c -o add.o sub.o:sub.c sub.hgcc -g -c sub.c -o sub.oclean:rm -f main main.o add.o sub.omakefile 的自動化變量
$@ 規則的目標文件名 $< 規則的第一個依賴文件名 $^ 規則的所有的文件列表下面是使用了自動化變量之后的makefile文件的編寫,對比之前那的可以簡化很多
.PHONY:clean #在這里說明 clean是一個偽變量 OBJECTS = main.o add.o sub.o #makefile 中的自定義的變量 main:$(OBJECTS)gcc -g $^ -o $@ # $^依賴文件列表 $@ 目標 main.o:main.cgcc -g -c $< -o $@ #$<依賴文件列表中的第一個依賴文件 add.o:add.c add.hgcc -g -c $< -o $@ sub.o:sub.c sub.hgcc -g -c $< -o $@clean:rm -f main $(OBJECTS)當一個文件中有多個makefie的時候可以使用
makefile clean -f makefile.1 //這樣就是說使用makefile.1中的說明去執行makefile需要執行的文件
執行的結果是:
rosfun@ubuntu:~/makefile$ make clean -f makefile.1 echo "begin delete..................." begin delete................... rm -f main main.o add.o sub.o優化之后:
.PHONY:clean main:main.o add.o sub.ogcc -g main.o add.o sub.o -o main main.o:main.cgcc -g -c main.c -o main.o add.o:add.c add.hgcc -g -c add.c -o add.o sub.o:sub.c sub.hgcc -g -c sub.c -o sub.oclean:@echo "begin delete..................." #這一句不想被打印出來 加上@ 符號rm -f main main.o add.o sub.o執行結果
rosfun@ubuntu:~/makefile$ make clean -f makefile.1 begin delete................... rm -f main main.o add.o sub.o rosfun@ubuntu:~/makefile$也就是說在命令行的前面加上@ makefile文件就會只執行相應的命令但是不把這一行打印出來
使用makefile 生成兩個都含有主函數的.c文件
rosfun@ubuntu:~/makefile/02$ touch 01test.c 02test.c rosfun@ubuntu:~/makefile/02$ ls 01test.c 02test.c rosfun@ubuntu:~/makefile/02$ gedit 01test.c rosfun@ubuntu:~/makefile/02$ gedit 02test.c rosfun@ubuntu:~/makefile/02$ ls 01test.c 02test.c rosfun@ubuntu:~/makefile/02$ gedit makefile rosfun@ubuntu:~/makefile/02$ make cc 01test.c -o 01test cc 02test.c -o 02test rosfun@ubuntu:~/makefile/02$ ./01test hello world rosfun@ubuntu:~/makefile/02$ ./02test 02 rosfun@ubuntu:~/makefile/02$ gedit makefile執行的結果如上:實現過程和相應為makefile文件如下:
.PHONY:clean all BIN=01test 02test #all 也是一個偽命令 all:$(BIN) #因為all是一個偽命令 所以在生成的時候不會生成 到時all的生成是依賴于$(BIN)的生成的要是想生 #成 all就必須先生成 $(BIN) 因為沒有給出生成$(BIN)具體方式所以在生成$(BIN)s時候編譯器會根據自己的規則自動的生成相應文件在使用gcc 生成可執行文件的時候 不需要使用 -c 說明
如下:
使用makefile 編譯多個可執行文件
記住兩種規則:
第一節課的生成多個可執行文件的makefile的編寫方式
增加模式規則或者后綴規則之后就可以實現 下面的這些方式
#生成多個還要主函數的文件的 makefile文件 主要是加上 虛擬目標 .PHONY:all .PHONY:clean all CC=gcc #定義一個變量用來替換gcc CFLAGS= -g BIN=01test 02test 03test #all 也是一個偽命令 all:$(BIN) # #%.o:%.c #使用模式規則 # gcc -g -c $< -o $@ #生成 .o文件要加上 -c說明 .c.o:$(CC) $(CFLAGS) -c $< -o $@ 01test:01test.o$(CC) -g $^ -o $@ #要是生成可執行文件 不需要使用 -c 02test:02test.ogcc -g $^ -o $@ 03test:03test.o public.o #新增加的public文件03test可執行文件的生成依賴于public文件加上的方式$(CC) $(CFLAGS) $^ -o $@clean:echo "正在清除相應的編譯文件!!!!"@echo "正在清除相關的編譯文件!!!!"rm -f $(BIN)#因為all是一個偽命令 所以在生成的時候不會生成 到時all的生成是依賴于$(BIN)的生成的要是想生 #成 all就必須先生成 $(BIN) 因為沒有給出生成$(BIN)具體方式所以在生成$(BIN)s時候編譯器會根據自己的規則自動的生成相應文件增加模式規則或者后綴規則之后就可以實現 下面的這些方式
新增加一個04test的文件只需要在makefile中all后面那一行增加一句 04test 的可執行文件名字就行了
總結
以上是生活随笔為你收集整理的一步一步的写出你自己的makefile文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作者:林旺群(1983-),男,博士,
- 下一篇: 2015年《大数据》高被引论文Top10