Linux Makefile中的目標(biāo)如何指定

小樊
82
2024-09-03 11:56:03

在 Linux 的 Makefile 中,目標(biāo)是要生成的文件或執(zhí)行的操作

  1. 顯式規(guī)則:這是最常用的方法,用于指定一個(gè)或多個(gè)目標(biāo)文件及其依賴關(guān)系。語(yǔ)法如下:
target: prerequisites
[TAB] recipe
  • target 是要生成的文件。
  • prerequisites 是生成目標(biāo)所需的輸入文件。
  • recipe 是生成目標(biāo)所需的命令(操作)。注意,命令前面需要有一個(gè)制表符(TAB)。

例如,以下 Makefile 指定了一個(gè)名為 my_program 的目標(biāo),它依賴于 main.cutil.c 兩個(gè)源文件:

my_program: main.c util.c
    gcc -o my_program main.c util.c
  1. 隱式規(guī)則:這種方法允許你使用預(yù)定義的規(guī)則,而無(wú)需顯式指定目標(biāo)、依賴關(guān)系和操作。隱式規(guī)則基于文件的擴(kuò)展名(如 .c、.o 等)自動(dòng)應(yīng)用。例如,以下 Makefile 將自動(dòng)應(yīng)用隱式規(guī)則來(lái)編譯和鏈接 C 程序:
CC = gcc
CFLAGS = -Wall
OBJFILES = main.o util.o

my_program: $(OBJFILES)
    $(CC) $(CFLAGS) -o my_program $(OBJFILES)
  1. 模式規(guī)則:這種方法允許你定義一組通用規(guī)則,以便根據(jù)特定模式生成目標(biāo)。語(yǔ)法如下:
target_pattern: prerequisite_pattern
[TAB] recipe

例如,以下 Makefile 使用模式規(guī)則將所有 .c 文件編譯為 .o 文件:

CC = gcc
CFLAGS = -Wall

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
  1. 偽目標(biāo):這些目標(biāo)不代表實(shí)際的文件,而是表示一組操作。偽目標(biāo)通常用于執(zhí)行特定任務(wù),如清理、安裝等。要將目標(biāo)聲明為偽目標(biāo),需要在 Makefile 開(kāi)頭添加 .PHONY 聲明:
.PHONY: clean

clean:
    rm -f *.o my_program

在這個(gè)例子中,clean 是一個(gè)偽目標(biāo),它刪除所有 .o 文件和名為 my_program 的可執(zhí)行文件。

總之,Makefile 中的目標(biāo)可以通過(guò)顯式規(guī)則、隱式規(guī)則、模式規(guī)則和偽目標(biāo)來(lái)指定。根據(jù)項(xiàng)目的需求和復(fù)雜性,可以選擇合適的方法來(lái)定義目標(biāo)。

0