gpt4 book ai didi

c++ - 如何使用 scons 运行 gtest

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:37 24 4
gpt4 key购买 nike

我有一个预编译版本的 gtest(我知道谷歌反对它,但这就是我们的项目将如何使用它),我想编写一个非常简单的测试并使用 scons 构建它。假设我有一个名为 test.cpp 的 super 简单测试,并且 gtest 安装在/opt/gtest 中。我不太擅长使用 Scons,想知道我的 SConstruct 应该是什么样子。

//test.cpp
#include "gtest/gtest.h"

TEST(MyTest, Test) {
ASSERT_TRUE(true);
}

int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

我当前的 SConstruct 看起来像这样(但不起作用)

env = Environment()

LIBS =''

common_libs = ['pthread', 'gtest']
env.Append( LIBS = common_libs )

Program('test.cpp', LIBS, LIBPATH='/opt/gtest/lib')

当我运行 scons 时收到以下消息

scons: Reading SConscript files ...
IndexError: list index out of range:
File "/home/user/testing/SConstruct", line 8:
Program('test.cpp', LIBS, LIBPATH='/opt/gtest/lib')
File "/usr/lib/scons/SCons/Script/SConscript.py", line 614:
return method(*args, **kw)
File "/usr/lib/scons/SCons/Environment.py", line 258:
return MethodWrapper.__call__(self, target, source, *args, **kw)
File "/usr/lib/scons/SCons/Environment.py", line 222:
return self.method(*nargs, **kwargs)
File "/usr/lib/scons/SCons/Builder.py", line 632:
return self._execute(env, target, source, OverrideWarner(kw), ekw)
File "/usr/lib/scons/SCons/Builder.py", line 540:
source = self.src_builder_sources(env, source, overwarn)
File "/usr/lib/scons/SCons/Builder.py", line 736:
s = self._adjustixes(s, None, src_suf)[0]

谢谢!

编辑:

改变之后

Program('test.cpp', LIBS, LIBPATH='/opt/gtest/lib')

Program('test', 'test.cpp', LIBS, LIBPATH='/opt/gtest/lib')

我得到以下错误

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o test test.o -L/opt/gtest/lib
test.o: In function `MyTest_Test_Test::TestBody()':
test.cpp:(.text+0x5f): undefined reference to `testing::internal::GetBoolAssertionFailureMessage(testing::AssertionResult const&, char const*, char const*, char const*)'
test.cpp:(.text+0x8c): undefined reference to `testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)'
test.cpp:(.text+0x9f): undefined reference to `testing::internal::AssertHelper::operator=(testing::Message const&) const'
test.cpp:(.text+0xb2): undefined reference to `testing::internal::AssertHelper::~AssertHelper()'
test.cpp:(.text+0xc6): undefined reference to `testing::internal::AssertHelper::~AssertHelper()'
test.o: In function `main':
test.cpp:(.text+0x16a): undefined reference to `testing::InitGoogleTest(int*, char**)'
test.cpp:(.text+0x16f): undefined reference to `testing::UnitTest::GetInstance()'
test.cpp:(.text+0x177): undefined reference to `testing::UnitTest::Run()'
test.o: In function `__static_initialization_and_destruction_0(int, int)':
test.cpp:(.text+0x1df): undefined reference to `testing::internal::GetTestTypeId()'
test.cpp:(.text+0x20e): undefined reference to `testing::internal::MakeAndRegisterTestInfo(char const*, char const*, char const*, char const*, void const*, void (*)(), void (*)(), testing::internal::TestFactoryBase*)'
test.o: In function `MyTest_Test_Test::MyTest_Test_Test()':
test.cpp:(.text._ZN16MyTest_Test_TestC2Ev[_ZN16MyTest_Test_TestC5Ev]+0x14): undefined reference to `testing::Test::Test()'
test.o: In function `testing::internal::scoped_ptr<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::reset(std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)':
test.cpp:(.text._ZN7testing8internal10scoped_ptrISsE5resetEPSs[testing::internal::scoped_ptr<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::reset(std::basic_string<char, std::char_traits<char>, std::allocator<char> >*)]+0x24): undefined reference to `testing::internal::IsTrue(bool)'
test.o: In function `testing::internal::scoped_ptr<std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> > >::reset(std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >*)':
test.cpp:(.text._ZN7testing8internal10scoped_ptrISt18basic_stringstreamIcSt11char_traitsIcESaIcEEE5resetEPS6_[testing::internal::scoped_ptr<std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> > >::reset(std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >*)]+0x23): undefined reference to `testing::internal::IsTrue(bool)'
test.o:(.rodata._ZTV16MyTest_Test_Test[vtable for MyTest_Test_Test]+0x20): undefined reference to `testing::Test::SetUp()'
test.o:(.rodata._ZTV16MyTest_Test_Test[vtable for MyTest_Test_Test]+0x28): undefined reference to `testing::Test::TearDown()'
test.o:(.rodata._ZTI16MyTest_Test_Test[typeinfo for MyTest_Test_Test]+0x10): undefined reference to `typeinfo for testing::Test'
test.o: In function `MyTest_Test_Test::~MyTest_Test_Test()':
test.cpp:(.text._ZN16MyTest_Test_TestD2Ev[_ZN16MyTest_Test_TestD5Ev]+0x1f): undefined reference to `testing::Test::~Test()'
collect2: ld returned 1 exit status
scons: *** [test] Error 1
scons: building terminated because of errors.

最佳答案

请换行:

Program('test.cpp', LIBS, LIBPATH='/opt/gtest/lib')

Program('test', 'test.cpp', LIBS, LIBPATH='/opt/gtest/lib')

您将获得一个名为 test 的二进制文件。

关于c++ - 如何使用 scons 运行 gtest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16365845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com