<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一起來寫Makefile

          共 1585字,需瀏覽 4分鐘

           ·

          2021-09-01 23:37

          前言:在Linux 系統(tǒng)下編寫 C/C++ 程序,學(xué)習(xí) Makefile 的基礎(chǔ)是非常有必要的,至少需要看懂程序的編譯鏈接過程,才能對(duì)項(xiàng)目有個(gè)整體的認(rèn)識(shí)。當(dāng)然最好是自己能寫 Makefile,本文介紹了 Makefile 的一些基本規(guī)則。

          Makefile 的規(guī)則

          首先需要了解 Makefile 文件的基本規(guī)則,如下:
          61d057e3327009e940ad92926afec4bd.webp
          按照上面的規(guī)則來寫一個(gè)程序編譯的 Makefile 腳本,如下:

          # 井號(hào)是注釋
          hello:hello.o
          gcc hello.o -o hello # 鏈接

          hello.o:hello.S
          gcc -c hello.S -o hello.o # 編譯

          hello.S:hello.i
          gcc -S hello.i -o hello.S # 匯編

          hello.i:hello.c
          gcc -E hello.c -o hello.i # 預(yù)編譯

          .PHONY: # 偽目標(biāo)
          clean:
          rm hello hello.i hello.S hello.o

          示例一

          接下來編寫一個(gè)測(cè)試程序 test 的 Makefile 文件,編譯后需要生成一個(gè) test 二進(jìn)制文件。目錄結(jié)構(gòu)如下:
          fff5c23edeadff89699fc729d719d674.webp
          根據(jù)規(guī)則編寫一個(gè)簡單的編譯腳本:

          test:main.o add.o sub.o mul.o div.o
          gcc main.o add.o sub.o mul.o div.o -o test

          main.o:main.c
          gcc -c main.c -o main.o
          add.o:add.c
          gcc -c add.c -o add.o
          sub.o:sub.c
          gcc -c sub.c -o sub.o
          mul.o:mul.c
          gcc -c mul.c -o mul.o
          div.o:div.c
          gcc -c div.c -o div.o

          .PHONY:
          clean:
          rm *.o
          cleanall:
          rm *.o test

          執(zhí)行 make 編譯效果如下:
          13864e8c465face12b143d3279a07eeb.webp

          使用Makefile變量

          Makefile 定義變量的幾種符號(hào)含義:?=?替換;?+=?追加;?:=?常量
          使用變量后的 Makefile 示例一文件:

          CC :=gcc
          TAR=test
          OBJ=main.o add.o sub.o mul.o div.o

          $(TAR):$(OBJ)
          $(CC) $(OBJ) -o $(TAR)

          main.o:main.c
          $(CC) -c main.c -o main.o
          add.o:add.c
          $(CC) -c add.c -o add.o
          sub.o:sub.c
          $(CC) -c sub.c -o sub.o
          mul.o:mul.c
          $(CC) -c mul.c -o mul.o
          div.o:div.c
          $(CC) -c div.c -o div.o

          .PHONY:
          clean:
          rm $(OBJ)
          cleanall:
          rm $(OBJ) $(TAR)

          Makefile 隱含規(guī)則

          • %.c?和?%.o?:任意的 .c 文件和 .o 文件

          • *.c?和 *.o?:所有的 .c 文件和 .o 文件

          Makefile 通配符

          Makefile 中常見的自動(dòng)變量

          命令含義
          $<第一個(gè)依賴文件的名稱
          $^所有的依賴文件
          $@所有的目標(biāo)文件

          利用通配符改進(jìn)的示例一

          CC :=gcc
          TAR=test
          OBJ=main.o add.o sub.o mul.o div.o

          $(TAR):$(OBJ)
          gcc $^ -o $@

          %.o:%.c
          $(CC) -c $^ -o $@

          .PHONY:
          clean:
          rm $(OBJ)
          cleanall:
          rm $(OBJ) $(TAR)
          瀏覽 52
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人综合在线观看 | 12—13女人毛片毛片 | 欧美女同网站 | 91无码人妻精品一区二区蜜桃 | 操逼123首页 |