有没有办法写一个目标
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 手册包含许多可以启发您学习过程的示例。