CMake教程04-安装与测试

CMake教程04-安装与测试

现在我们可以开始向我们的项目添加安装规则和测试支持。

安装规则

安装规则相当简单:对于myfunc库,我们要安装库文件和头文件,而对于应用程序,我们要安装可执行文件和配置的头文件。

添加安装规则:
1.在func/CMakeLists.txt末尾追加如下内容:

install(TARGETS myfunc DESTINATION lib)
install(FILES myfunc.h DESTINATION include)

2.在项目根目录的CMakeLists.txt末尾追加如下内容:

install(TARGETS first_app DESTINATION bin)
install(FILES "${PROJECT_BINARY_DIR}/config.h" DESTINATION include)

安装规则添加完成了,接下来我们可以安装试试了:

mkdir ./test_install
cmake --install ./ --prefix "./test_install"
tree ./test_install

其中--prefix设置了安装的目录位置前缀(默认使用CMAKE_INSTALL_PREFIX变量值,通常为/usr/local目录),安装后的目录结构为:

./test_install
├── bin
│   └── first_app
├── include
│   ├── config.h
│   └── myfunc.h
└── lib
    └── libmyfunc.a

测试支持

接下来让我们测试我们的应用程序。在项目根目录的CMakeLists.txt文件的末尾,我们可以启用测试,然后添加一些基本测试来验证应用程序是否正常工作。

enable_testing()
# 第一次测试:运行可执行程序
add_test(NAME Runs COMMAND first_app)

# 第二次测试:验证无参数运行结果,并使用正则表达式规则判断输出结果是否正确
add_test(NAME Usage COMMAND first_app)
set_tests_properties(Usage
  PROPERTIES PASS_REGULAR_EXPRESSION "Hi.*"
  )

# 第三次测试:定义一个测试函数,以后可以调用测试函数验证程序的正确性
function(do_test target arg result)
  add_test(NAME Comp${arg} COMMAND ${target} ${arg})
  set_tests_properties(Comp${arg}
    PROPERTIES PASS_REGULAR_EXPRESSION ${result}
    )
endfunction(do_test)

# 开始进行批量基准测试
do_test(first_app 4 "hello 4")
do_test(first_app "tom" "hello tom")

现在重新构建我们的项目,然后运行基准测试:

cmake ../ch04
make
make test

我们可以看到测试结果如下:

$ make test
Running tests...
Test project /apps/code/github/my/cmake/tutorial/build_ch04
    Start 1: Runs
1/4 Test #1: Runs .............................   Passed    0.00 sec
    Start 2: Usage
2/4 Test #2: Usage ............................   Passed    0.00 sec
    Start 3: Comp4
3/4 Test #3: Comp4 ............................   Passed    0.00 sec
    Start 4: Comptom
4/4 Test #4: Comptom ..........................   Passed    0.00 sec

100% tests passed, 0 tests failed out of 4

Total Test time (real) =   0.00 sec

四个测试用例都验证通过了,当然这里展示的仅仅是一个简单的测试用例,现实中会很复杂,比如数据库关联、文件操作等等,这些复杂的验证有时候就需要依赖脚本或者只能手工验证了。功能测试通过后还要进行压力测试或者批量测试等等,以保证应用程序的正确性。

本节为了验证测试传参,小小的修改了一下hello.cpp代码内容为:

#include <iostream>
#include "config.h"

#ifdef USE_MYFUNC
#       include "myfunc.h"
#endif

using namespace std;


void print_version(char *app)
{
    cout << app << " Version " << VERSION_MAJOR << "." << VERSION_MINOR << endl;
}

int main(int argc, char *argv[])
{
    if(argc == 1) {
        cout << "Hi! CMake Project! This is a hello world demo!" <<endl;
        print_version(argv[0]);
#ifdef USE_MYFUNC
        print_info();
#endif
    } else if( argc == 2){
        cout <<"hello " << argv[1] <<endl;
    }
    return 0;
}

转载本文时请注明出处及本文链接地址CMake教程04-安装与测试

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注