最近没怎么做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 - A Tutorial。”
这是准确的吗?我的印象是在最近的 FreeBSD 版本中 pmake 被 bsdmake 取代 - 这是我问题的根源吗?
注意:我对归结为“您可以使用 GNU make 做到这一点”的答案不感兴趣 - 这是 FreeBSD make 的问题。