2017-01-14 2 views
2

Я использую Google Tests в проекте с waf как системой сборки. Я хочу знать эффективный способ работы с файлами ресурсов.Как организовать файлы тестовых ресурсов при использовании waf

Для структуры каталогов, как следующие:

MyProject 
├── build 
├── src 
| ├──do_something.cpp 
| ├──do_something.h 
├── test 
| ├── unit_test.cpp 
│ ├── resources 
│ │ ├── input1.txt 
│ │ ├── input2.txt 
├── wscript 

После создания, запуска тестов из каталога сборки, я должен был бы файлы ресурсов, которые будут скопированы. Каталог сборки будет выглядеть следующим образом:

MyProject 
├── build 
| ├── test 
│ │ ├── resources 
│ │ | ├── input1.txt 
│ │ | ├── input2.txt 
│ │ ├── unit_test 

Для достижения этой цели, мой текущий WScript является:

def options(opt): 
    opt.load('compiler_cxx') 

def configure(conf): 
    conf.load('compiler_cxx') 

def build(bld): 
    bld.stlib(source='src/do_something.cpp', 
       target='mylib', 
       includes='src') 

    bld.exec_command("cp -r test/resources build/test") 

    bld.program(source='test/unit_test.cpp', 
       includes='src', 
       target='test/unit_test', 
       use='mylib') 

Использование bld.exec_command как это кажется Hacky. Что лучше? Как другие люди организуют свои тестовые ресурсы с помощью waf?

Я использую waf 1.9.5.

ответ

0

Самый простой способ - это, конечно, изменить вашу программу, чтобы она могла читать ресурсы из произвольного местоположения. Зачем замаскировать файловую систему несколькими копиями одних и тех же файлов?

Это говорит, вы можете легко скопировать дерево каталогов рекурсивно, используя:

for f in ctx.path.ant_glob('tests/resources/**/*'): 
    ctx(features = 'subst', source = f.srcpath(), 
     target = f.srcpath())