1. 程式人生 > >Makefile自動生成依賴檔案,並自動編譯

Makefile自動生成依賴檔案,並自動編譯

因為經常要用到makefile編譯,每次都為標頭檔案的依賴關係頭痛,所以這次費了兩天時間開發了一個通用的makefile,它可以自動生成依賴檔案,並編譯,當然你要按檔案裡面的說明來填充一些中間檔名.

程式碼如下:

#自動依賴項(*.d),並編譯生成檔案
#
編譯選項
LDFLAGS = -Wall #-ggdb
#
庫目錄
DIR = /usr/local/arm/3.3/lib
#
載入庫
LIBS = -lm #-L$(DIR) -llibjtts_uni.a
#
編譯器選擇
CC = arm-linux-gcc#
注意這裡不能有空格,否則生成*.d時的sed替換命令出錯
#
目標檔名
TRG = gprs
#

生成中間檔名,也是依賴檔案,所以必須跟檔案同名
OBJS = gprs.o atcmd.o msg.o parscmd.o CRC32.o logfile.o tfrr_pro.o telefun.o\
          ../include/general.o ../include/config.o ../include/io.o
           
SRCS = ${OBJS:%.o=%.c} #
OBJS中所有.o檔案轉換成.c檔案 
DEPE = ${OBJS:%.o=%.d} #.o ->.d

all: $(TRG)

$(TRG):$(OBJS)$(DEPE)    #這裡把*.d也設定依賴

,這樣*.d檔案修改也會重編譯檔案
$(CC) $(OBJS) -o $(TRG) $(LIBS) $(LDFLAGS)

-include$(DEPE)     #這裡有2個隱晦規則:1,如果找到*.d檔案執行下面的生成指令,2.找到*.d檔案,則編譯命令也是自動推導的

depend:$(DEPE)       #
自動生成依賴*.d檔案
$(DEPE):%.d:%.c
-rm -f $*.d;\
gcc -MM $<|sed 's,^.*:,$*.o:,' >log.$$$$1;\
echo $(CC) $(LDFLAGS) -c -o $*.o $< >log.$$$$2;\
cat log.$$$$1 log.$$$$2|sed 's/^$(CC)/\t$(CC)/g' >

[email protected];\
rm -f log.$$$$*;\
  
install:                    #安裝到目錄中
cp $(TRG) ./debug/   

clean:                      #
清除目標檔案
rm -f $(OBJS) $(TRG) 

clear:                      #
清除依賴檔案和目標檔案
rm -f $(OBJS) $(DEPE) $(TRG)


相關推薦

Makefile自動生成依賴檔案,自動編譯

因為經常要用到makefile編譯,每次都為標頭檔案的依賴關係頭痛,所以這次費了兩天時間開發了一個通用的makefile,它可以自動生成依賴檔案,並編譯,當然你要按檔案裡面的說明來填充一些中間檔名. 程式碼如下: #自動依賴項(*.d),並編譯生成檔案 #編譯選項 LDF

makefile 自動生成依賴檔案

gcc  -c -o a.o a.c -Wp, -MD a.d a.d就是生成的依賴檔案 在a.d中 有 a.o:a.c a.h  (以及其他依賴的標頭檔案等) 在makefile中,包含依賴檔案,使用依賴檔案,使用如下: include a.d %.o : %.c$(CC

makefile(05)_自動生成依賴關系

makefile 自動生成依賴 include 11.自動生成依賴關系_上 11.0. 實驗原料 本節實驗所需的源文件和頭文件:原文件:func.c #include "stdio.h" #include "func.h" void foo() { printf("void foo() :

unity 檔案更改自動生成.bytes檔案 與 點選play自動讀取指定路徑excel檔案生成.bytes檔案

using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using Sys

關於make依賴檔案自動生成

  在GNU make中文手冊這本書中,3.14節講到了依賴檔案的自動生成,如下圖  圖中的規則對C原始檔和Makefile在同一目錄,是正確的。但是不在同一目錄的又希望依賴檔案在對應的目錄下,比如src/log/log_file.c,希望依賴檔案log_file.d生成在src/log/下。因為

一份通用makefile,自動遍歷子目錄原始檔,自動生成依賴

這份makefile可以將當前makefile所在資料夾以及所有子資料夾中的cpp檔案打包成靜態庫/動態庫/可執行檔案. 自動生成所有依賴關係,修改任何檔案都可以觸發重新編譯相應依賴的檔案。 在U

makefile專題:自動生成依賴關係(續)

.PHONY : all clean rebuild MKDIR := mkdir RM := rm -rf CC := gcc DIR_DEPS := deps DIR_EXES := exes

makefile自動生成依賴

Makefile中,可能需要書寫一些規則來描述一個.o目標檔案和標頭檔案的依賴關係.例如,如果在main.c中使用"#include defs.h",那麼我們可能需要如下那樣的一個規則來描述當頭檔案"defs.h"被修改以後執行make,目標"main.o"應該被重建.

Ubuntu下使用cmake結合CmakeLists.txt生成makefile檔案進行編譯

1.CMake編譯原理CMake是一種跨平臺編譯工具,比make更為高階,使用起來要方便得多。CMake主要是編寫CMakeLists.txt檔案,然後用cmake命令將CMakeLists.txt檔案轉化為make所需要的makefile檔案,最後用make命令編譯原始碼生成可執行程式或共享庫(so(sha

makefile自動生成依賴關係

手工編寫依賴關係不僅工作量大而且極易出現遺漏,更新也很難及時,修改源或標頭檔案後makefile可能忘記修改。為了解決這個問題,可以用gcc的-M選項自動生成目標檔案和原始檔的依賴關係。-M選項會把包含的系統標頭檔案以及其所包含的其他系統標頭檔案也找出來了,如果我們不需要

自動生成依賴關系(十)

png CM 之前 out HA def 打印 card 期望 我們在之前的 makefile 學習中,其目標文件(.o)只依賴於源文件(.c)。那麽如果在源文件中還包含有頭文件,此時編譯器如何編譯源文件和頭文件呢?我們來看看編譯行為帶來的缺陷:1、預處理器

shell自動生成檔案有一個問號的字尾

寫了一個指令碼,自動處理一個檔案。   rm -f session.log rm -f link wget ftp://hostname/f:/ddn/session.log egrep '^N[[:digit:]]|^D[1-4]' session.log >>lin

idea配置自動生成java檔案頭資訊

1.   操作流程:  Settings-> Editor -> File and Code Templates -> Class   2.  配置模板 2. 1 去掉 #parse("File Header.java")

webpack4 系列教程(十三):自動生成HTML檔案

作者按:因為教程所示圖片使用的是 github 倉庫圖片,網速過慢的朋友請移步《webpack4 系列教程(十三):自動生成 HTML 檔案》原文地址。更歡迎來我的小站看更多原創內容:godbmw.com,進行“姿勢”交流 ♪(^∇^*) 0. 課程介紹和資料 >>>本節

vs生成檔案如何自動拷貝到指定目錄

在編譯vs的工程後,有時需要將生成的檔案,比如dll、lib等拷貝到別的目錄去,可以寫一個指令碼插到屬性管理器中,就能完成自動拷貝。 找到:屬性》生成事件》後期生成事件》命令列 然後把下面的程式碼貼上進去 @echo xxxxxxxxxxx if $(Platform

windows程式崩潰時自動生成dump檔案方法

  /****************第一步新增createdump.h********************************* 新增一個頭檔案:createdump.h #pragma once #include <windows.h> #inclu

Mybatis 自動生成mapper檔案

  在pom.xml下的<build>內加入: <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId&g

安卓開發 Android Studio生成簽名檔案自動簽名以及獲取SHA1和MD5值

一、配置IDE生成簽名檔案 1、在studio的選單欄中找到"bulid"這一欄,選擇"Generate Signed APK" ,如下圖所示 2.、新建簽名檔案。 "Create new…"新建一個簽名檔案 "Choose existing…”"擇一個已

eclipse不自動生成R檔案和R檔案報錯問題

 android 的R.java檔案報錯是個很頭疼的問題,雖然很少遇到,但由於R.java檔案為自動生成的,解決問題一般不容易。 首先,一般此類問題都是由於資原始檔出問題導致的,即使資原始檔並沒有報錯。 遇到此類問題,首先可以嘗試以下兩種方法: 1、右擊你的Android專案——>Android

idea中建立.gitignore檔案忽略提交系統自動生成檔案

網上很多帖子都是新增外掛的方法,此處就不必多說了,可以實現過濾檔案,此處不需要直接下載外掛,直接將檔案拷貝到專案跟路徑下即可, 新增檔案".gitignore"到專案的跟目錄下 其中,.giti