欧美在线专区-欧美在线伊人-欧美在线一区二区三区欧美-欧美在线一区二区三区-pornodoxxx中国妞-pornodoldoo欧美另类

position>home>Spotlights

為什么要使用Makefile工具,怎么使用?

[導讀]為什么要使用Makefile工具?當源碼文件比較多的使用使用時候,不適合直接gcc命令來編譯,工具這時候需要一個自動化編譯工具來編譯。使用使用Make 一般說是工具GNU Make 是一個軟件,用于將源碼文件編譯器為可執行的使用使用二進制文件,make工具主要用于完整自動化編譯,工具make編譯的使用使用時候需要Makefile文件提供編譯文件。


為什么要使用Makefile工具,怎么使用?

為什么要使用Makefile工具?

當源碼文件比較多的工具時候,不適合直接gcc命令來編譯,使用使用這時候需要一個自動化編譯工具來編譯。工具Make 一般說是使用使用GNU Make 是一個軟件,用于將源碼文件編譯器為可執行的工具二進制文件,make工具主要用于完整自動化編譯,使用使用make編譯的工具時候需要Makefile文件提供編譯文件。

1、使用使用引入Makefile

    a.c------>***.s------>***.ob.c------>xxx.s------>xxx.oxxx.o + ***.o ------>test

    缺點:修改任一個文件所有.c都要重新編譯,文件更多時可想而知,時間耗不起!
    改進:應該分別編譯,最后再鏈接

      gcc -c a.c gcc -c b.cgcc a.o b.o –o test

      為此需要一個這樣的工具:

      01.如果工程沒有編譯過,那么工程中的所有.c文件都要被編譯并且鏈接成可執行程序。
      02.如果工程中只有個別C 文件被修改了,那么只編譯這些被修改的C文件即可。
      03.如果工程的頭文件被修改了,那么我們需要編譯所有引用這個頭文件的C文件,并且鏈接成可執行文件。

      2、makefile?的基本規則:?當依賴比目標新執行命令

      目標文件:依賴文件
      TAB鍵??命令
      根據Makefile的基本規則,我們針對上面的gcc編譯過程來寫一個Makefile文件,如下所示:

        test:a.o b.ogcc –o test a.o b.oa.o: a.cgcc -c a.cb.o: b.cgcc -c b.cclean:rm *.orm test

        這樣我們使用 make 命令就可以完成對 a.c ?b.c的編譯和鏈接,直接生成test執行文件。

        3、Makefile 的變量

        Makefile 也可以添加變量,但Makefile跟C語言不一樣,沒有類似于 int char …等很多的類型,只有字符串類型,比如可以定義一個 object = a.o b.o ?引用變量使用$(objdect)即可。

        這樣就可以將上面的Makefile盡心簡化,不需要輸入兩次的 a.o b.o, 具體如下:

          objdect = a.o b.otest:$(object)gcc –o test $(object)a.o: a.cgcc -c a.cb.o: b.cgcc -c b.cclean:rm *.orm test

          4、Makefile的通配符%和自動化變量

          對于上面的Makefile如果有很多.c文件,那我們就需要寫很多依賴規則,可以使用通配符來對其簡化,%.c 表示所有的.c文件,%.o表示所有的.o文件,當然我們就可以把上面的!

          b.o 依賴于 b.c和a.o依賴于a.c 等寫成?%.o 依賴%.c的形式。對于命令則需要引入另一個叫做自動化變量了,如何通過一行命令來從不同的依賴文件中生成對應的目標?自動化變量就是用來實現這個功能的。在自動化變量中常用的是$@、$<、$^

          $@ :?規則中目標集合
          $
          $^?:所有依賴文件的集合

          這樣我們又可以對MakeFile進行簡化啦……….,如下所示:

            objdect = a.o b.otest:$(object)gcc –o test $(object)%.o: %.cgcc -c [ DISCUZ_CODE_0 ]lt;clean:rm *.orm test

            5、Makefile偽目標

            我們總是使用make clean來執行刪除任務,單當我們在當前目錄添加一個名為clean的文件,那么make clean還能奏效嗎?如下:


            解決辦法:使用偽目標,將clean定義為假想目標即可。

              objdect = a.o b.otest:$(object)gcc –o test $(object)%.o: %.cgcc -c [ DISCUZ_CODE_0 ]lt;clean:rm *.o test.PHONY:clean

              6、Makefile條件判斷Makefile同樣支持條件判斷,語法有兩種如下:?

              <條件關鍵字>
              ? ? ? ? <條件為真時執行的語句>
              endif


              <條件關鍵字>
              ? ? ? ? <條件為真時執行的語句>
              else
              ? ? ? ?<條件為假時執行的語句>
              endif
              ??
              條件關鍵字:ifeq、ifneq、ifdef、ifndef,四個條件關鍵字分為兩對:ifeq和ifneq用于是否相等;ifdef和ifndef 用于判斷是否定義。


              END

              本文系21ic藍V作者一路向北lm編撰

              ▍ 推薦閱讀
              呵,你會51單片機的精確延時嗎?
              關于畫電路圖的10大分歧,你站哪邊?
              早期MCU芯片是怎么加密的?


              →點關注,不迷路←

              免責聲明:本文內容由21ic獲得授權后發布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!

              Popular articles

              主站蜘蛛池模板: 三级黄色录像片| 影音色资源| 毛片免费试看| 美女扒开大腿让我爽| 巨大黑人极品hdvideo| 欧美黑人巨大xxxxxxxx| 55爱爱网| 小受被强攻按做到哭男男| 最新国产精品精品视频| 久久国产免费观看精品3| 国产精品对白刺激久久久| 精品久久久久久久久久中文字幕 | 成人国产精品2021| 性生活2| 国产小视频网站| 啊灬啊灬啊灬快灬深用力| 一个人看的www免费高清中文字幕| 一个人看的www高清直播在线观看| 久久精品中文字幕第一页| 欧美综合自拍亚洲综合图| 日本阿v视频在线观看高清| 狠狠色噜噜狠狠狠合久| zoom和okzoom在线视频| 中文字幕在线观| 中日韩精品视频在线观看| 恸哭の女教师大桥未久| 中文字幕黑人借宿神宫寺| 伊人第一路线| 日本里番全彩acg里番下拉式 | 香蕉大战欧美在线看黑人| 久久天天躁夜夜躁狠狠85台湾 | 色戒720p| 亚洲日本乱码在线观看| 亚洲春黄在线观看| 2021光根影院理论片| 哒哒哒免费视频观看在线www| 免费国产成人午夜电影| 没有被爱过的女人在线| 美国式禁忌| 美女性生活电影| 麻豆影片|