我过去写过复杂的C和C ++ makefile。但是,我似乎无法使我的D生成文件正常工作。它引发了上千行的“未定义的引用”错误,看起来好像Phobos无法链接。我该如何解决?

我在Fedora 19 Linux上使用GNU make和LDC2。

编辑:编译和直接使用LDC2链接可以正常工作。仅当使用“ make”调用时,才会出现错误。似乎make正在尝试调用单独的链接器。

编辑2:这是我的makefile:

# This macro contains the source files
sources := $(wildcard *.d)

binaries := $(sources:%.d=%)

all: $(binaries)

%.o:%.d
        ldc2 $< -O5 -check-printf-calls


删除.o将其修复。

最佳答案

我不知道Pattern Rules的复杂性,但是我相信这就是您的问题所在。

%.o:%.d
    ldc2 $< -O5 -check-printf-calls


您已经要求make通过调用ldc2命令将每个.d文件转换为.o。但是,您不是在请求ldc2生成目标文件,而是在要求它生成可执行文件(我不知道您要dmd / gdc的哪个标志:-c)。虽然在链接器之前我会从中期望编译器错误。

通过删除.o,我必须假定Make而是一次而不是单独传递所有.d文件。

10-04 14:28