2014-10-01 129 views
0

我无法使用scons,g ++和gtest成功构建项目。我想用gtest作为单元测试。我的项目看起来如下:使用scons与g ++和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 

当我检查图书馆'名称'时,它已经构建。你能告诉我问题是什么吗?

回答

2

对于环境“env”,您已将所需的包含搜索路径“src”添加到变量CPPPATH中。 但是,您建立了没有定义CPPPATH的环境“test_env”的库。 这就是为什么编译器调用中缺少“-I”指令的原因。

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