使用带有g++和gtest的scons制作单元测试二进制文件

making unit test binaries using scons with g++ and gtest

本文关键字:scons 单元测试 二进制文件 gtest g++      更新时间:2023-10-16

我无法使用scons、g++和gtest成功构建项目。我想使用gtest作为单元测试。我的项目如下:

  project 
     | -SConstruct
     | -src
          | -name.hh
          | -name.cc
          | -main.cc
     | -gtest 
          | -/src/gtest_name.hh
          | -/src/gtest_name.cc
          | -/src/gtest_main.cc

在项目建设的SConstruct内部,我有以下代码:

 program_srcs = ['name.cc']
 cpppath      = ['./src']
 libpath      = ['.', 'path_to_third_party_lib']
 libs         = ['thirdlib']
 pro_env = Environment()
 env.Append(CPPPATH = cpppath)
 env.Append(LIBS = libs)
 env.Append(LIBPATH = libpath)
 env.Library('name', program_srcs)
 libpath.append('name')
 env.Append(LIBPATH = libpath)
 env.Program(target = 'NAME', source = [ './src/main.cc']
 test_src = ['./gtest/src/gtest_name.cc']
 test_env = Environment()
 test_env['LIBPATH'] = ['.']  
 test_env.Program("unit_test", test_src, LIBS=['name'])

gtest_name.cc 内部

include"name.hh"
TEST_F(TESTNAME, testmethod) {
    Name name;
    ASSERT_EQ(name.get_surname, "MIKE");
}

当我尝试编译和构建时,gtest出现了以下错误。

 g++ -o gtest/src/gtest_name.o -c gtest/src/gtest_name.cc
 gtest/src/gtest_name.cc:10:29: error: name.hh: No such file or directory

当我检查库"name"时,它已经构造好了。你能告诉我出了什么问题吗?

您已经为环境"env"向变量CPPPATH添加了所需的包含搜索路径"src"。但是您使用未定义CPPPATH的环境"test_env"构建库。这就是编译器调用中缺少"-I"指令的原因。

请注意,SCons为环境提供了一个Clone()方法。它从一个环境中复制所有当前的定义(例如构建器),以创建一个新的环境。。。这可能在这里派上用场。