我正在使用waf构建并运行gtest。
如果我将所有内容都放在我的root wscript中,就像下面一样。
def build( bld ):
# build hello world lib
bld.recurse("src/cpp/hw")
# build hello world gtest app
cppUnitTest = bld.program(
target = 'test_run',
source = [ 'test/unit/test_run.cpp' ],
use = [ 'HW_static', 'GTEST_static' ],
lib = [ 'pthread' ],
includes = [ bld.env.LIBGTEST_INCLUDES ],
)
# run c++ unit test
bld(
dependsOn = [cppUnitTest],
name = 'c++ unit test',
rule = './test_run',
cwd = bld.path.find_dir( 'build' )
)
它构建了一个名为HW(Hello World)的lib,它构建了一个名为test_run的应用程序,而不是运行该测试应用程序。
但如果我想要应用程序' test_run'使用recurse建立我不能让它工作。这是我到目前为止的一次尝试。
def build( bld ):
global cppUnitTest
# build hello world lib
bld.recurse("src/cpp/hw")
# build hello world gtest app
bld.recurse("tests/unit")
# run c++ unit test
bld(
dependsOn = [cppUnitTest],
name = 'c++ unit test',
rule = './test_run',
cwd = bld.path.find_dir( 'build' )
)
并且子文件夹中的wscript_build文件看起来像那样
cppUnitTest = bld.program(
target = 'test_run',
source = [ 'test_run.cpp' ],
use = [ 'HW_static', 'GTEST_static' ],
lib = [ 'pthread' ],
includes = [ bld.env.LIBGTEST_INCLUDES ],
)
编辑:正如您在下面所见,我找到了一个特别适用于测试应用程序的解决方案。但我会对更通用的解决方案感兴趣,如何确保某些构建步骤以正确的顺序运行,等待彼此。例如如果我有一个构建应用程序,我用它来生成一些用于构建其他应用程序的代码等等。
答案 0 :(得分:0)
因此,为了运行单元测试,我找到了一个非常好的简单解决方案。我在waf_unit_test模块中使用了build。只需添加这样的导入......
from waflib.Tools import waf_unit_test
...而不是将值“test”的属性“features”添加到我的所有测试程序......
bld.program(
features = 'test'
target = 'test_run',
source = [ 'test_run.cpp' ],
use = [ 'HW_static', 'GTEST_static' ],
lib = [ 'pthread' ],
includes = [ bld.env.LIBGTEST_INCLUDES ],
)
...并删除dependsOn和cppUnitTest指令。不幸的是,我的测试应用程序的输出被抑制了,但是如果成功的测试可以在构建函数中添加以下回调,则获得反馈。
bld.add_post_fun(waf_unit_test.summary)
这对gtest应用程序来说没问题,但我需要一个更通用的解决方案来保持任务的顺序。见编辑问题。