Lesson12 Linux 工程管理器 make 的使用

一、 概念介紹:

1.  構建:指定代碼文件的編譯順序和編譯的安排。

2.  make:最常用的構建工具,主要用於 c 語言項目。

     是一個根據指定的 shell 命令進行構建的工具。

     當某個文件發生變化時,就可以用 make 重新構建。

3.  Makefile/makefile:make 命令默認依賴的構建文件,可用用 make -f 文件名 或 make --file=文件名 指定爲其它文件。

二、 makefile 文件格式: 

 makefile 文件由一系列的規則組成,每條規則的形式如下:明確目標構建的前置條件,以及如何構建。

 <target>: <prerequisites>        即      <目標>:<前置條件>
 [tab]  <command>                 即      [tab 鍵]  <命令>

其中目標是必須的,前置條件和命令必須至少存在一個。

1.  目標(target):一個目標構成一個規則,通常爲文件名,可爲一個或多個,文件名間用空格分隔。

2.  僞目標(phony target):目標爲某個操作的名字。爲了避免操作名與文件名相同,要用 .PHONY: 僞目標名 聲明僞目標。

3.  前置條件(prerequisites):通常爲一組文件名,用空格分隔,指定目標是否進行重新構建的標準。

     只要一個前置文件不存在或者更新過,目標就需要重新構建。

4.  命令(command):指定如何更新目標文件,由一行或多行 Shell 命令組成,通常爲生成目標文件。

     每行命令前必須有一個 tab 鍵,可通過修改內置變量更改 .RECIPEPREFIX=符號 。

     命令的每一行都是單獨在 Shell 中執行的,沒有繼承關係(如變量)。要實現繼承,可以

  • 將命令寫在一行,命令間加 ; 
  • 在命令行尾添加 ; \
  • 在 target 上一行聲明 .ONESHELL

三、 示例: 

利用 make 管理文章中的示例:https://blog.csdn.net/sinat_40471574/article/details/105253099 

寫好頭文件和源文件,組織好項目,之後編寫 makefile 文件,利用 make 工具自動進行編譯,生成可執行文件。

1.  靜態庫實現:

app : app.c libother1.a libother2.a \
                include/other1.h  include/other2.h
        cc app.c -o app -Iinclude -L./ -lother1 -lother2; \
        mv other1.o other2.o src;\
        mv libother1.a libother2.a lib

other1.o : include/other1.h src/other1.c
        cc -c src/other1.c -o other1.o
other2.o : include/other2.h src/other2.c
        cc -c src/other2.c -o other2.o
libother1.a : other1.o 
        ar rcs libother1.a other1.o 
libother2.a : other2.o
        ar rcs libother2.a other2.o 


.PHONY:
clean :
        rm -rf src/*.o

.PHONY:
addlib: lib/libother1.a lib/libother2.a
        cp lib/libother1.a lib/libother2.a /usr/local/lib

.PHONY:
addinclude:
        cp include/other1.h include/other2.h /usr/local/include

2.  動態庫實現:

app : app.c libother.so other1.o other2.o\
                include/other1.h  include/other2.h
        echo "/myCode/c/linux_project/dynamic/lib" >> /etc/ld.so.conf ;\
        cc app.c -o app -I include -L./ -lother; \
        mv libother.so lib; \
        mv other1.o other2.o src;\
        ldconfig

other1.o : include/other1.h src/other1.c
        cc -fPIC src/other1.c -Iinclude -c
other2.o : include/other2.h src/other2.c
        cc -fPIC src/other2.c -Iinclude -c
libother.so : other1.o other2.o
        cc -shared -o libother.so *.o

.PHONY:
clean :
        rm -rf src/*.o

.PHONY:
addlib: lib/libother1.a lib/libother2.a
        cp lib/libother.so /usr/local/lib

.PHONY:
addinclude:
        cp include/other1.h include/other2.h /usr/local/include

3.  其它: 

make 工具詳細教程:https://www.cnblogs.com/8335IT/p/8143316.html

make 管理工程示例:https://github.com/lueyoung/2019-2020-2-linux-shell/tree/master/makefiles 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章