使用make -O

时间:2017-11-06 21:20:53

标签: protocol-buffers gnu-make autoconf

我们在重新编译protobuf v2.6时遇到问题。它用于工作,gmake将输出以下内容:

...
gmake[3]: Entering directory `/atc/proto/protobuf-2.6.0/src'
depbase=`echo google/protobuf/compiler/main.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
/usr/bin/g++ -DHAVE_CONFIG_H -I. -I..    -pthread -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare  -m32 -MT google/protobuf/compiler/main.o -MD -MP -MF $depbase.Tpo -c -o google/protobuf/compiler/main.o google/protobuf/compiler/main.cc &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo google/protobuf/stubs/atomicops_internals_x86_gcc.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ../libtool --tag=CXX   --mode=compile /usr/bin/g++ -DHAVE_CONFIG_H -I. -I..    -pthread -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare  -m32 -MT google/protobuf/stubs/atomicops_internals_x86_gcc.lo -MD -MP -MF $depbase.Tpo -c -o google/protobuf/stubs/atomicops_internals_x86_gcc.lo google/protobuf/stubs/atomicops_internals_x86_gcc.cc &&\
mv -f $depbase.Tpo $depbase.Plo
...

现在它输出以下内容并且不编译任何内容。所有.o文件都是0bytes。

...
gmake[5]: Entering directory `/atc/proto/protobuf-2.6.0/src'
touch google/protobuf/compiler/.dirstamp
touch google/protobuf/compiler/.deps/.dirstamp
touch google/protobuf/compiler/main.o
touch google/protobuf/stubs/.dirstamp
touch google/protobuf/stubs/.deps/.dirstamp
touch google/protobuf/stubs/atomicops_internals_x86_gcc.lo
...

我们希望有使用谷歌protobuf经验的人可以解释为什么它会触摸文件而不是编译它们。知道了这一点,我们可以快速解决问题。我们已经在另一台机器上构建了它,我们一直在比较我们能想到的一切,但现在我们正在通过autoconf make文件用一个精细的齿梳来理解这种行为。

我们启动google protobuff make的脚本非常简单,我们没有对google protobuf做任何修改(我们只修改它然后构建它)。

build_proto.sh

set -x
pb_pkg=protobuf-2.6.0
cc=/usr/bin/g++
if [[ ! -e "$pb_pkg.tar.gz" ]]; then
    echo "Can't find $pb_pkg.tar.gz"
    exit
fi

tar xvfz $pb_pkg.tar.gz
cd $pb_pkg

export PATH=$PATH:/opt/bb/bin/:/usr/bin
./configure CC=$cc CXX=$cc CFLAGS=-m32 CXXFLAGS=-m32 FFLAGS=-m32 FCFLAGS=-m32
gmake

生成文件

.PHONY: all

all:
    ./build_proto.sh
clean:
    rm -rf protobuf-2.6.0


build: all

test: all

uname -a

Linux atc-build 2.6.32-642.6.2.el6.x86_64 #1 SMP Mon Oct 24 10:22:33 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux

更新

问题不在配置中。 Ran配置自己,两个系统的差异是相同的,不包括琐碎的差异。必须在做。

1 个答案:

答案 0 :(得分:0)

问题是两件事的结果。事后看来,其中一个应该是系统中一个未能建立的明显警告标志。

  1. 使用-O标志调用顶级make。
  2. build_proto.sh正在使用gmake!
  3. 从gmake切换build_proto.sh以解决问题。 gmake不明白-O所以不仅难以回传输出,而且显然是以错误的顺序运行(详细的输出显示了jobserver问题)。