与GNU Make并行构建时,为什么归档后目标文件为空?

时间:2015-03-28 00:19:13

标签: makefile gnu-parallel ar

我有一个问题,即每次并行构建时,归档器似乎都没有完全正确地归档目标文件。我用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。

我用于构建libs的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 $@ 

正如您所看到的,我甚至使用文件锁来确保只有一个线程可以同时归档lib。那么为什么对象文件是空的?我已经指定仅在目标文件完成构建时存档的lib,但似乎存在竞争条件,归档程序在最后一个目标文件完全构建之前开始存档。那么这种行为可能是什么原因呢?

我应该补充说,它似乎主要是库中的一个文件,它可以解决这个问题,但它也可以是其他文件。

0 个答案:

没有答案