我使用waf來構建並運行gtest。waf使用遞歸併保持任務順序
如果我把所有東西都放在我的根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(你好世界)的lib,它構建的應用程序調用test_run和比它會運行一個測試應用程序。
但是,如果我想使用遞歸構建應用程序'test_run',我不會讓它工作。這是我迄今爲止的嘗試之一。
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 ],
)
編輯:正如你可以看到下面我找到了解決方法特別適用於測試的應用,這是好的。但我會對更一般的解決方案感興趣,如何確保某些構建步驟以正確的順序運行,以便彼此等待。例如如果我有一個應用程序來構建我用來生成一些用於構建其他應用程序等的代碼。