makefile的全自動化編譯和批量編譯

2021-01-08 net工具人

對於大型項目來說,邊寫邊修改makefile中的.c文件是不效率的

makefile實現自動添加.c文件(全自動化編譯)。

$(wildcard 模式)

在當前目錄下匹配所有的相應模式的文件。

src = $(wildcard *.c) ,用於獲取所有.c文件。

$(src :%.c=%.o), 把src的.c全部替換為.o (這裡的%是通配符)

obj = $(src:%.c=%.o)

這裡的 %.o:%.c 意思是所有的.o文件的生成,都依賴於.c文件。替代了下邊用#注釋的那幾句指令。同理,當只執行make xxx.o 的時候,也會自動匹配到 %.o:%.c 上,執行xxx.c 到xxx.o 的編譯過程。如果有需要單獨編譯的部分,可以單獨寫出來。

makefile實現多個項目的編譯。

如果有多個.c文件需要編譯成可執行文件,可以用makefile進行批量操作。

這裡需要一個all 的偽目標。利用依賴關係。

all:$(EXF) 表示makefile 要生成 all, 就依賴於目錄下所有的可執行文件。

$(EXF):%:%.o 表示每生成一個可執行文件,依賴於其相對應的.o文件。

%.o:%.c 表示每生成一個.o文件,依賴於其相對應的.c文件。

這樣,就能保證生成了多個可執行文件。

相關焦點

  • Linux系統下多線程程序編譯makefile文件
    在Linux下,編譯一個多線程的程序命令為:本文引用地址:http://www.eepw.com.cn/article/201609/305140.htmgcc -lpthread -o file file.c在Linux下,用交叉編譯器編譯一個在
  • linux內核源碼編譯過程分析之Kconfig,Makefile
    在之前的課程裡,當我們在編譯linux內核源碼的時候,不知道大家會不會有一些疑問:1.linux內核源碼那麼多(大概800M),編譯的時候它(編譯系統)怎麼知道應該要編譯哪些文件呢?2.怎樣保證源碼的編譯順序?比如,先編譯A模塊,再編譯B模塊?3.怎麼樣把這些編譯出來的一個一個的目標文件,最終形成一個內核鏡像文件?
  • CMake for Mac(編譯工具)
    CMake Mac版是一款Mac平臺上免費的編譯工具,CMake旨在構建、測試和軟體打包。CMake是用於控制軟體使用簡單的平臺和編譯器編譯過程獨立配置文件。CMake生成本機makefile和工作區,可以使用您所選擇的編譯器環境。
  • linux中的makefile
    在linux中gcc一次只能編譯一個目標。對於大型項目,效率太低。因此引入linux中一個重要的編譯工具makefile,相當於在一個文本文件中,指定程序的編譯方式。makefile關係到整個工程的編譯規則。小項目無所謂,對於一個大的項目來說,其必不可少。
  • Qt 中編譯和設置protobuf
    今天就給大家詳細講解一下如何在Qt下編譯以及使用protobuf。準備工作下載並安裝QtQT的下載地址,建議使用5.7以上版本選擇MinGW 版本選擇 next 即可完成安裝。下載cmake並安裝根據嚮導使用默認選項設置即可完成安裝。
  • windows 編譯openssl
    5.編譯Openssl。ms\do_nasmnmake -f ms\ntdll.maknmake -f ms\ntdll.mak testnmake -f ms\ntdll.mak installnmake -f ms\ntdll.mak clean說明,如果要編譯靜態庫就使用nt.mak,具體命令如下:ms\do_nasm 生成makefile文件
  • 超另類:在vscode下實現編譯仿真下載,你絕對想不到
    這個教程將介紹下如何在vscode下實現這些操作,真正實現一個vscode可以吃天、實現編譯仿真下載一條龍服務,而你只需要在vscode下的終端敲幾個命令而已。。。編譯:編譯只需在vscode終端中執行make指令就行,如下圖:仿真:仿真的話需要vscode下的插件cortex debug,這個教程我粘貼上我之前寫的國產晶片fm33lc02x的教程,大家只要把晶片名字換成STM32F429就行(1) vscode下載插件cortex debug插件(2) 創建launch.json
  • 程式設計師的術與道:術——makefile基本操作
    makefile用於管理c語言項目,負責項目的編譯構建工作,主打依賴管理。經典的開源項目編譯三步走如下:2.makefile有什麼用對於C語言來說,或者對於一般的編譯型語言來說,程序從源文件到可執行文件都要經歷以下步驟:預編譯編譯
  • gcc編譯工具生成動態庫和靜態庫之一——介紹
    gcc作為編譯工具,用在Linux作業系統中,可以編譯C、C++、Object-C、JAVA等語言。編譯過程中可以帶編譯選項,選擇編譯過程。2) -S :只編譯,不彙編,生成彙編代碼「.S」。3) -E :只進行預編譯/預處理,不做其他處理。4) -o file:把輸出文件輸出到file裡。5) -g :在可執行程序中包含標準調試信息。6) -v :列印出編譯器內部編譯各過程的命令行信息和編譯器的版本。
  • AVR筆記1:AVR studio 不能編譯
    造成的原因是這個軟體只會在默認安裝目錄下自動生成Makefile文件,一般是C盤,如果你改你的工程存儲諸如D盤或者後面的盤符,那麼你就自己去生成一個Makefile,拷入你的項目根目錄下,這時編譯就不會報錯了。
  • 在Eclipse下編譯Keil MDK工程
    基中xxx為工程根目錄路徑, "-d"表示設置KeilBuilder的工程路徑, "-e"表示在編譯時自動對Eclipse工程進行設置, 目前僅設置"C/C++ Build" -> "Settings" -> "Cross GCC Compiler" -> 「Symbols」和」Includes」以及」Cross GCC Assmebler」 -> 「General」項.
  • 手把手教你編譯fabric
    前言之前一直在使用fabric編譯好的鏡像,這次想自己去手動編譯下fabric的源碼,去生成peer,orderer這些二進位文件以及cryptogen這些工具和docker鏡像。如果網絡沒有問題的話,在fabric目錄下,使用makefile,直接make all即可。
  • 在CentOS7.6裡編譯安裝PHP7.4(最新版),很詳細
    首先要先下載並編譯安裝PHP最新版本,請到php官網下載:這裡我首先在系統裡在新建存儲源碼包的文件夾,比如我存放在這裡下載安裝PHP7.4之前,你要先安裝各種依賴包yum install -y openssl-devel libxml2-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel
  • android反編譯和防止反編譯的方法
    【IT168技術】android基於java的,而java反編譯工具很強悍,所以對正常apk應用程式基本上可以做到100%反編譯還原。  因此開發人員如果不準備開源自己的項目就需要知道怎樣防止反編譯和反編譯他人的項目來學習。
  • PostgreSQL從菜鳥到專家 源碼編譯安裝
    另外,你可以在任何UNIX兼容的系統中從源碼創建和安裝PostgreSQL,包括Mac OS X。        相關閱讀:        PostgreSQL從菜鳥到專家 基礎介紹        PostgreSQL從菜鳥到專家 歷史和架構        PostgreSQL從菜鳥到專家 數據存取設計        PostgreSQL從菜鳥到專家 源碼編譯安裝  通過源碼安裝PostgreSQL
  • Eclipse下的Java反編譯插件 查看原始碼不再困難
    Eclipse下的Java反編譯插件 查看原始碼不再困難Eclipse下的Java反編譯插件:Eclipse Class Decompiler,整合了目前最好的2個Java反編譯工具Jad和JD-Core,並且和Eclipse Class Viewer無縫集成,能夠很方便的使用本插件查看類庫源碼,以及採用本插件進行Debug調試。
  • 編譯造句和解釋_編譯的例句有哪些 - 小孩子點讀
    編譯(biān yì),動詞。編輯與翻譯。[魯迅《致夏傳經》:「我所譯著的書,別紙錄上,凡編譯的,惟《引玉集》、《小約翰》、《死魂靈》三種尚佳。」]編譯參考例句:1、這可以在編譯的語法分析階段完成。2、他是這家雜誌社的編譯。
  • Java | 聊一聊編譯過程(編譯前端 & 編譯後端)
    前言經過前面幾篇文章的積累,相信你已經掌握了 靜態的 Class 文件的結構,也理解了虛擬機類加載和字節碼執行的 動態過程;這篇文章請點讚,你的點讚和關注真的對我非常重要!除此之外,編譯一詞還可以指運行期即時編譯(JIT,Just in Time Compile)或者(靜態的)提前編譯(AOT,Ahead of Time Compile),這兩種編譯稱為 編譯後端。
  • Linux裡Makefile是什麼?如何工作的?
    makefile是用於自動編譯和連結的,一個工程有很多文件組成,每一個文件的改變都會導致工程的重新連結-----但是不是所有的文件都需要重新編譯,makefile能夠紀錄文件的信息,決定在連結的時候需要重新編譯哪些文件!當你需要在一些源文件改變後運行或更新一個任務時,通常會用到 make 工具。
  • 嵌入式開發-C語言高級編程-Makefile
    1、是Make工程管理器,主要用於管理較多的文件Make工程管理器也就是個「自動編譯管理器」,這裡的「自動」是指他能根據文件 時間戳自動發現更新過的文件而減少編譯的工作量,同時,這通過讀入Makefile 文件的內容來執行大量的編譯工作Make只編譯改運的代碼文件,而不用完全編譯