我想将Boost.Test用于测试驱动开发。
我要求scons创建两个可执行文件,主要是一个,测试是一个。
我所有的主要项目文件都在./src/
中,我所有测试专用文件都在./test/
中
问题是:
在这种配置下,我的可执行Test无法链接,因为(我执行测试的类的)所有主要项目对象文件都不在同一目录中。
您是否知道如何调整scons文件,以便链接可执行Test可以使用
./src./
中的目标文件?以下是我的
main.scons
文件:import os
env=Environment(CPPPATH=['/usr/local/boost/boost_1_52_0/boost/','./src/'],
CPPDEFINES=[],
LIBPATH=['/usr/local/boost/boost_1_52_0/boost/libs/','.'],
LIBS=['boost_regex'],
CXXFLAGS="-std=c++0x")
env['ENV']['TERM'] = os.environ['TERM']
env.Program('Main', Glob('src/*.cpp'))
#
testEnv = env.Clone()
testEnv['CPPPATH'].append('./test/')
testEnv['LIBS'].append('boost_unit_test_framework')
testEnv.Program('Test', Glob('test/*.cpp'))
最佳答案
尽管“重复对象列表”方法适用于简单项目,但是您可能会遇到一些限制,即测试代码不需要链接到主程序的整个对象空间。例如,存根不是特定单元测试重点的数据库层。
作为替代方案,您可以创建(静态)通用代码库,将它们链接到主要可执行文件和测试框架。
common_sources = ['src/foo.cpp', 'src/bar.cpp'] # or use Glob and then filter
env.Library("common", common_sources)
program_sources = ['src/main.cpp']
env.Program("my_program", program_sources, LIBS=['common'])
...
testEnv['LIBPATH'] = ['.'] # or wherever you build the library
testEnv.Program("unit_test", test_sources, LIBS=['common'])
这也避免了您提到的重复
main()
问题,因为只有program_sources
和test_sources
列表应包含带有主例程的适当文件。