在 BSD make 中将目标与多个目标文件链接

问题描述 投票:0回答:1

我正在尝试编写一个简单且可移植的

Makefile
,可以使用
gmake
bmake
进行处理,因此我决定坚持使用隐式后缀规则作为避免语法不兼容的最可靠方法,例如所有目标先决条件的
$^
$>
变量。它们还共享一组通用变量,例如
CFLAGS
CPPFLAGS
LDFLAGS
LDLIBS

该项目是

dwm
,最终目标是从
dwm
编译的
dwm.c
可执行文件,并且还需要与
util.o
drw.o
目标文件链接。

我的第一次尝试是这样的规则:

dwm: util.o drw.o
dwm: LDLIBS += -lX11 -lXft -lfontconfig

我没有指定任何构建规则,只是设置了 FLAG,这与 GNU

make
完美配合。 BSD 给出了几乎相同的命令,除了最后一个命令看起来像这样:

cc -pipe -g -std=c99 -pedantic -Wno-deprecated-declarations -I/usr/include/freetype2 -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -DVERSION=\"6.4\"  -o dwm dwm.c -lX11 -lXft -lfontconfig

drw.o
util.o
缺失,尽管它们是之前构建的。

原因是 BSD

make
仅使用
${.IMPSRC}
(或
$<
)作为
.c
后缀规则,但是我真的不明白如何实现最简单的用例而不为每个用例编写自定义链接规则目标。请注意,我构建该项目没有问题,我只是在学习
make

makefile
1个回答
0
投票

我对 BSD make 不熟悉。但是,如果二进制文件的默认后缀规则仅使用

$<
(或等效内容),则它已损坏,您必须替换它。您可以(应该能够)将其替换为以下内容:

.o:
    $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS)
© www.soinside.com 2019 - 2024. All rights reserved.