【发布时间】:2018-09-27 00:06:42
【问题描述】:
我最近没有做很多C编程,但是最近我重新访问了一个旧项目,发现在FreeBSD下构建库的旧Makefile不再有效。这是过去可以使用的 Makefile 的简化版本:
TEST = Test
LIBTEST = lib$(TEST).a
CC = cc
.PRECIOUS: $(LIBTEST)
all: $(LIBTEST)
LIBSRC = test.c
# Do not automatically delete library source files
.SECONDARY: $(LIBSRC)
LIBOBJ = $(LIBSRC:%.c=%.o)
$(LIBTEST): $(LIBTEST)($(LIBOBJ))
$(AR) $(ARFLAGS) $@ $?
rm -f $?
clean:
@rm -f *.o $(LIBTEST)
这是一个简单的 C 程序:
/* test.c */
#include <stdio.h>
int
test(char const *text)
{
printf("%s\n", text);
return 1;
}
看起来像 Makefile 指令依赖:
$(LIBTEST): $(LIBTEST)($(LIBOBJ))
不再有效。结果是:
ar -crD libTest.a
rm -f
我一直在细读“人造”,但没有成功。
让我感到困惑的是,'man make' 说“有关 make 和 makefile 的更详尽描述,请参阅 PMake - 教程。”
这是准确的吗?我的印象是在最近版本的 FreeBSD 中 pmake 被 bsdmake 取代 - 这是我问题的根源吗?
注意:我对归结为“您可以使用 GNU make 做到这一点”的答案不感兴趣 - 这是 FreeBSD make 的问题。
【问题讨论】: