0

有没有办法写一个目标

1)只创建目标文件?

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

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

4

1 回答 1

2

有一个隐含的规则。假设您有以下 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在本例中),并且在规则中使用 finalleclean删除它们以重新开始。

$@是规则名称的替换。在最后一种情况下,它会是client.

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

于 2012-10-26T03:57:46.387 回答