next up previous contents
Next: 使用者手冊 Up: Makefile 變數 Previous: makefile 變數實例二   Contents

實機練習題

  1. 共同要求:
    1. 在家目錄下建立 zzz 目錄。
    2. 切換工作目錄到 zzz,所有練習皆存在此目錄。
    3. 下載檔案 make1.tar.gz
    4. 解打包壓縮 make1.tar.gz。
    5. 進入 make1 工作目錄。
    6. 每題的執行檔 target 都改成與指定的 makefile 檔名加副檔名 bin,例如:mfv1.bin, mfv2.bin, mfv3.bin ... 。
    7. 題目沒要求的,不要多做。
  2. 承上一章的 makefile mf4,新增 mfv1,所有的 .o 檔設定成變數 OBJS。
  3. 承上題 mfv1,產生 makefile mfv2
    1. 包含原 mfv1 的目標項目。
    2. 增加所有相依性法則,.o 目標項目皆不使用內建法則。
    3. 將 main.o 2.o 3.o 的「相依項目」改用內建變數 $<,其他不要更動。
  4. 承上題 mfv2,產生 makefile mfv3,要求如下:
    1. 設定編譯器變數 CC = gcc,編譯選項變數 CFLAGS = -W。
  5. 承上題 mfv3,產生 makefile mfv4,要求如下:
    1. 包含原 mfv3 的目標項目。
    2. 使用變數 $@ 產生目標項目 mfv4.bin。
    3. 增加目標項目 remove 移除產生的執行檔及所有 .o 檔,當 .o 檔不存在時忽略錯誤。
  6. 承上題 mfv4 ,產生 makefile mfv5,要求如下:
    1. 增加目標項目 mdir 建立目錄 /tmp/mfv5.mdir.test,只建一層目錄,請問最精簡方式建立。
    2. 當要建的目錄存在時忽略錯誤,使用以下命令測試生效:
      make -f mfv5 mdir && echo Yes
      
  7. 承上題 mfv5 ,產生 makefile mfv6,要求如下:
    1. 包含原 mfv5 的目標項目。
    2. 新增目標項目 install
      1. 安裝目錄變數 DYBIN = /tmp/dywang/bin。
      2. 判斷安裝目錄 DYBIN 是否存在?如果不存在,必須先建目錄。 不要使用 if...then,判斷後以 &&|| 執行建立目錄即可。
      3. 判斷腳本不輸出到 stdout。
      4. 所有命令在同一個 shell。
      5. 除判斷式內腳本外,其他腳本以「前一命令成功才執行下一個命令」的方式進行。
      6. 安裝檔案已存在時,直接覆蓋。
      7. 以單一命令完成「執行檔必須所有人可執行,但都不可寫入」的設定。
      8. 目標項目 install 的法則以最精簡的腳本完成,「判斷目錄是否存在的判斷式」只做建立目錄,其他命令都不可放在判斷式中。不 echo 輸出到螢幕,一個判斷式+三個命令即可完成。


De-Yu Wang 2019-08-12