SCons找不到它应该自己构建的文件

时间:2018-03-12 10:20:52

标签: scons

我有一个简单的SConstruct文件来使用MinGW构建google测试库:

env = Environment(platform='posix')  # necessary to use gcc and not MS
env.Append(CPPPATH=['googletest/'])
env.Append(CCFLAGS=[('-isystem', 'googletest/include/'), '-pthread'])
obj = env.Object(source='googletest/src/gtest-all.cc')
# linking skipped due to error search
# env.Append(LINKFLAGS=['-rv'])
# bin = env.StaticLibrary(target='libgtest', source=[obj])

该脚本位于主googletest\文件夹中。在运行它时 - 无论是否有链接 - 输出都是:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o googletest\src\gtest-all.o -c -isystem googletest/include/ -pthread -Igoogletest googletest\src\gtest-all.cc
scons: *** [googletest\src\gtest-all.o] The system cannot find the file specified
+-.
  +-googletest
  | +-googletest\src
  |   +-googletest\src\gtest-all.cc
  |   +-googletest\src\gtest-all.o
  |   | +-googletest\src\gtest-all.cc
  |   | +-googletest\src\gtest-death-test.cc
  |   | +-googletest\src\gtest-filepath.cc
  |   | +-googletest\src\gtest-port.cc
  |   | +-googletest\src\gtest-printers.cc
  |   | +-googletest\src\gtest-test-part.cc
  |   | +-googletest\src\gtest-typed-test.cc
  |   | +-googletest\src\gtest.cc
  |   | +-googletest\src\gtest-internal-inl.h
  |   +-googletest\src\gtest-death-test.cc
  |   +-googletest\src\gtest-filepath.cc
  |   +-googletest\src\gtest-internal-inl.h
  |   +-googletest\src\gtest-port.cc
  |   +-googletest\src\gtest-printers.cc
  |   +-googletest\src\gtest-test-part.cc
  |   +-googletest\src\gtest-typed-test.cc
  |   +-googletest\src\gtest.cc
  |   +-googletest\src\libgtest-all.a
  |     +-googletest\src\gtest-all.o
  |       +-googletest\src\gtest-all.cc
  |       +-googletest\src\gtest-death-test.cc
  |       +-googletest\src\gtest-filepath.cc
  |       +-googletest\src\gtest-port.cc
  |       +-googletest\src\gtest-printers.cc
  |       +-googletest\src\gtest-test-part.cc
  |       +-googletest\src\gtest-typed-test.cc
  |       +-googletest\src\gtest.cc
  |       +-googletest\src\gtest-internal-inl.h
  +-SConstruct
scons: building terminated because of errors.

我还尝试在一行中构建库:env.StaticLibrary(source='googletest/src/gtest-all.cc') - 结果是一样的。

只需执行实际的g ++调用就可以得到我想要的目标文件。 让我感到困惑的是SCons应该将对象文件视为它自己创建的工件。我想知道它为什么在它完成之前尝试使用它。那我在这里错过了什么?如何让SCons等到编译完成后呢?

顺便说一句:我只是在使用SCons方面有一些经验,并且曾经调整过一次脚本 - 但我并没有真正深刻的知识。

使用的版本:SCons 3.0.1,Python 3.6.3,MinGW 7.3.0

1 个答案:

答案 0 :(得分:0)

这有用吗?

env = Environment(tools=['mingw','gnulink','ar'])  # You should specify the tools
env.Append(CPPPATH=['googletest/'])
env.Append(CCFLAGS=[('-isystem', 'googletest/include/'), '-pthread'])
obj = env.Object(source='googletest/src/gtest-all.cc')
# linking skipped due to error search
# env.Append(LINKFLAGS=['-rv'])
# bin = env.StaticLibrary(target='libgtest', source=[obj])