makefile的自動(dòng)推導(dǎo)

main.c 文件

#include <stdio.h>
int main()
{
        printf("mian \n");
        return 0;
}

test.c 文件

#include <stdio.h>
int val2 = 100;

Makefile 文件

%.d:%.c
        g++ -MM $< > $@ >$@.tmp; \
        sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.tmp > $@; \
        rm -f $@.tmp

.PHONY: clean

sources = test.c main.c 
include $(sources:.c=.d)

main:main.o test.o
        g++ $^ -o $@
clean:
        rm *.o

然后就可以編譯出可執(zhí)行文件了。


Makefile的推導(dǎo)過程

知識(shí)點(diǎn)1:

test.o:test.c

上面這一條命令等價(jià)于 ,因?yàn)閙akefile會(huì)自動(dòng)的補(bǔ)全這樣的命令。

test.o:test.c
  g++ test.c -c test.o

知識(shí)點(diǎn)2:

%.d:%.c
        g++ -MM $< > $@ >$@.tmp; \
        sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.tmp > $@; \
        rm -f $@.tmp

會(huì)生成一個(gè).d 文件

test.o test.d : test.c

知識(shí)點(diǎn)3:

include $(sources:.c=.d)

等價(jià)于

include test.d main.d 

等價(jià)于 把對應(yīng)的.d文件導(dǎo)入到makefile中

test.o test.d : test.c

再根據(jù)知識(shí)點(diǎn)1,這一條語句變成了這樣。

test.o test.d : test.c
    g++ test.c -o test.c

于是,上面的makefile變成

%.d:%.c
        g++ -MM $< > $@ >$@.tmp; \
        sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.tmp > $@; \
        rm -f $@.tmp

.PHONY: clean

sources = test.c main.c 

test.o test.d : test.c
      g++ test.c -o test.c
main.o main.d : main.c
      g++ main.c -o main

main:main.o test.o
        g++ $^ -o $@
clean:
        rm *.o
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,529評論 0 13
  • 來自陳浩的一片老文,但絕對營養(yǎng)。 示例工程:3 個(gè)頭文件*.h,和 8 個(gè) C 文件*.c。 初 編譯過程,源文件...
    周筱魯閱讀 4,785評論 0 17
  • makefile關(guān)系到整個(gè)工程的編譯規(guī)則,一個(gè)工程中的源文件不計(jì)其數(shù),按其類型、功能、模塊分別放在若干的目錄當(dāng)中,...
    Joe_HUST閱讀 1,985評論 0 3
  • 1.Makefile規(guī)范 target 這 一 個(gè) 或 多 個(gè) 的 目 標(biāo) 文 件 依 賴 于prerequisi...
    G風(fēng)閱讀 2,088評論 0 3
  • 最近幾日經(jīng)常是掐著點(diǎn)去上班,就會(huì)常遇見腳步匆匆的上班族,有的邊走邊打電話、看微信,有的邊走邊吃早餐.... ...
    幸福就是剛剛好閱讀 237評論 0 0

友情鏈接更多精彩內(nèi)容