Makefile 为什么在与GNU Make并行构建时,归档后的对象文件是空的?

Makefile 为什么在与GNU Make并行构建时,归档后的对象文件是空的?,makefile,gnu-parallel,unix-ar,Makefile,Gnu Parallel,Unix Ar,我有一个问题,在每次并行构建时,archiver似乎没有完全正确地归档对象文件。我用make-j32 如果我调查档案: ar x mylib.a ls -l myFile.o -rw-rw-r-- 1 tester users 0 Mar 00:00:00 myFile.o 同时,运行程序nm也不会显示任何符号 但是,当我调查obj目录中的对象文件时,该文件具有符号和非零大小,因此似乎归档程序没有正确归档库 我用于构建LIB的makefile如下所示: AR := flock make.

我有一个问题,在每次并行构建时,archiver似乎没有完全正确地归档对象文件。我用
make-j32

如果我调查档案:

 ar x mylib.a
 ls -l myFile.o
 -rw-rw-r-- 1 tester users 0 Mar 00:00:00 myFile.o
同时,运行程序
nm
也不会显示任何符号

但是,当我调查obj目录中的对象文件时,该文件具有符号和非零大小,因此似乎归档程序没有正确归档库

我用于构建LIB的makefile如下所示:

AR := flock make.lock $(AR)

all: createLib

TARGET_OBJECTS = $(addprefix $(OBJDIR)/, $(OBJECTS))

createLib: $(TARGET_OBJECTS)
    @echo "----- Archiving lib ($(LIB))"
    mkdir -p $(LIBDIR)
    $(AR) ru $(LIBDIR)/$(LIB) $^

$(OBJDIR)/%.o: %.cc
   @echo "----- Compiling file $< for ($(LIB))"
   $(VERB)mkdir -p $(@D)
   $(VERB)mkdir -p $(OBJDIR)
   $(VERB)$(CXX) $(CXXFLAGS) $(CPPFLAGS) $($(*F)_CPPFLAGS) -c $(addprefix ${PWD}/, $<) -o $@ 
AR:=flock make.lock$(AR)
全部:createLib
TARGET_OBJECTS=$(addprefix$(OBJDIR)/,$(OBJECTS))
createLib:$(目标对象)
@echo“----存档库($(库))”
mkdir-p$(LIBDIR)
$(AR)ru$(LIBDIR)/$(LIB)$^
$(OBJDIR)/%.o:%.cc
@echo“----编译文件$$(动词)$(CXX)$(CXXFLAGS)$(CPPFLAGS)$($(*F)CPPFLAGS)-c$(addprefix${PWD}/,$我还应该补充一点,即使在重建项目时,库也不会更新,因为$(TARGET_对象)是可以的。您使用的GNU make版本是什么,您在什么平台上使用它?我在这里没有看到任何明显的错误(虽然有一些奇怪的事情),虽然这显然不是你真正的makefile,所以可能在真正的makefile中有一些错误,没有在这里转置。但是如果不是,可能是GNU make中的一个bug;如果你没有使用最新版本(4.1)你可以试试看它是否有用。我运行的是GNU Make 3.81,但我测试了4.0,但没有成功。我运行的是带有RT补丁的内核3.18.9。然而,我删除了整个项目并重建了该项目,然后它又开始工作。似乎有什么东西让Make想要重建。我不知道是什么。也许是个bug.内核版本不相关:根据“什么平台”我指的是GNU/Linux、Windows、OSX、Solaris、AIX、VMS等。我从您的回答中假设您使用的是GNU/Linux。根据您的描述,干净的构建不应该有任何区别:如果真的是make在构建对象之前尝试构建库,并且您的makefile看起来与您所展示的一样ed,那么这不可能发生。看起来
$(TARGET\u OBJECTS)
是空的。请检查一下。