首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cmake生成测试数据

cmake生成测试数据
EN

Stack Overflow用户
提问于 2017-03-15 10:20:52
回答 1查看 1K关注 0票数 0

我的测试需要有一些数据文件才能运行。这些文件很大,所以我不想将它们提交到我的VCS中,而是使用脚本按需生成它们。但是生成文件也需要很多时间,所以我只想在每次运行make test时只生成一次,而不是每次都生成一次。

是否有可能让我的测试依赖于磁盘上文件的存在,并告诉cmake在不存在或过时的情况下重新生成该文件?

我尝试了以下几种方法,但似乎不起作用:

代码语言:javascript
复制
enable_testing()
add_test(NAME foo COMMAND bla myfile.txt)
set_tests_properties(foo PROPERTIES DEPENDS myfile.txt)
add_custom_command(OUTPUT myfile.txt COMMAND createmyfile)

有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2017-03-15 12:57:06

是的完全有可能。CMake可以在目标和文件之间添加依赖项,这些文件不需要是源文件。

您的代码步骤看起来不错(我没有构建它),但我认为缺少的是测试的构建。

我使用add_custom_target而不是add_custom_command

CMakeLists.txt

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.8.12)
add_library(mylib SHARED mylib.cpp)

# Create out.dat as an example 
add_custom_target(testfile_outdat COMMAND touch out.dat)

add_executable(mytest mytest.cpp)
target_link_libraries(mytest mylib)
add_dependencies(mytest testfile_outdat)
add_test(NAME mytest COMMAND mytest)

此示例在执行make时生成代码。此解决方案适用于测试未修改数据的情况。

测试数据的创建依赖于目标mytest,而不是将mytest用作测试的声明。

根据创建测试数据文件的命令,一些特定于平台的内容是可能的。因此,您可以根据要支持的平台创建不同的custom_targets。

mylib.h

代码语言:javascript
复制
bool compare(int a, int b);

mylib.cpp

代码语言:javascript
复制
#include "mylib.h"
bool compare(int a, int b)
{
    return a == b;
}

mytest.cpp

代码语言:javascript
复制
#include <stdio.h>
#include "mylib.h"
int main(int arcc, char* argv[])
{
    bool actual = compare(1, 1);
    bool expected = true;
    printf("Testresult %s\n", (actual == expected) ? "OK" : "Failed");
    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42806857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档