如何在GNUmake中编写目标以仅创建* .o文件

时间:2012-10-26 03:11:25

标签: gnu-make

有没有办法将目标写入

1)只创建目标文件?

2)只链接目标文件并创建二进制文件?

我希望能够分两步创建我的二进制文件。

1 个答案:

答案 0 :(得分:1)

有一个implicit rule。假设您有以下Makefile:

CC=cc -g

all: client

client: client.c
    $(CC) client.c -o client

clean:
    -rm -f client

如果您只想要目标文件,那么您只需要运行:

$ make client.o

您将获得目标文件。但是,您也可以编写显式规则,例如:

%.o: %.c
    $(CC) -c $<

以前的规则是从任何.c文件构建到对象(.o)文件的规则。 $<有助于获取规则所依赖的文件名。

如果您有多个对象文件,则可能需要定义变量:

objects = client.o foo.o bar.o

client: $(objects)
    $(cc) -o $@ $(objects)

$(objects): config.h

clean:
    -rm -f client $(objects)

在这种情况下,objects是与要编译的目标文件关联的变量。在规则client中使用哪个作为依赖关系并作为链接它们的参数,它还用于定义依赖于头文件的规则(在此示例中为config.h),并且在clean规则删除它们以重新开始。

$@取代了规则的名称。在最后一种情况下,它将是client

manual of GNU Make包含许多可以启发您的学习过程的示例。