gpt4 book ai didi

c++ - Scons 和 Boost.Test,我的测试项目无法链接到我的主项目目标文件

转载 作者:太空狗 更新时间:2023-10-29 23:06:45 25 4
gpt4 key购买 nike

我想使用 Boost.Test 进行测试驱动开发。

我让scons创建了两个可执行文件,一个是main,一个是test。我所有的主要项目文件都在./src/,我所有的测试专用文件都在./test/

问题是:

  • 主要项目目标文件放在./build/src/
  • 测试项目目标文件放在./build/test/

在这样的配置中,我的可执行测试无法链接,因为所有主要项目目标文件(我对其执行测试的类)都不在同一目录中。

您是否知道如何调整我的 scons 文件,以便可执行测试的链接可以使用 ./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_sourcestest_sources 列表应该包含适当的文件主要程序。

关于c++ - Scons 和 Boost.Test,我的测试项目无法链接到我的主项目目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14739898/

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