2017-10-15 128 views
1

我有克利翁内的以下项目结构:构建C++项目与CMake和克利翁

├── CMakeLists.txt 
├── src 
│   ├── func1.c 
│   ├── func1.h 
│   └── main.c 
└── test 
    └── unit 
     └── test_func1.c 

其中的CMakeLists.txt:

cmake_minimum_required(VERSION 3.5) 
    project(untitled) 

    set(CMAKE_C_STANDARD 11) 
    find_library(CMOCKA_LIBRARY libcmocka.so) 

    # application binary 
    set(SOURCE_FILES src/main.c src/func1.c src/func1.h) 
    add_executable(untitled ${SOURCE_FILES}) 

    # test binary 
    include_directories("${CMAKE_SOURCE_DIR}/src") 
    set(TEST_SOURCE_FILES src/func1.c src/func1.h test/unit/test_func1.c) 
    add_executable(unit_tests ${TEST_SOURCE_FILES}) 
    target_link_libraries(unit_tests ${CMOCKA_LIBRARY}) 

的main.c:

#include <stdio.h> 
#include "func1.h" 

int main() { 
    printf("Hello, World!\n"); 
    print_hello(); 
    return 0; 
} 

test_func1 .c:

#include <stdlib.h> 
    #include <stdarg.h> 
    #include <stddef.h> 
    #include <setjmp.h> 
    #include <cmocka.h> 
    #include "func1.h" 

    static void test_func1(void **state){ 
     int ret = print_hello(); 
     assert_true(ret == 0); 

    } 

    int main(int argc, char **argv){ 

     const UnitTest tests[] = { 
      unit_test(test_func1), 
     }; 

     return run_tests(tests); 
    } 

func1.c:

#include <stdio.h> 
    #include "func1.h" 

    int print_hello(){ 
     printf("hello"); 
     return 0; 
    } 

func1.h:

#ifndef UNTITLED_FUNC1_H 
    #define UNTITLED_FUNC1_H 

    int print_hello(); 

    #endif //UNTITLED_FUNC1_H 

当我从克利翁内构建应用程序,它只是建立了无 应用程序二进制文件,并且它不生成测试二进制文件。为了构建 测试,我必须创建一个构建目录并调用cmake并手动创建。

我想:

  1. 有克利翁建立在“建”
  2. 只有建立应用程序二进制文件,如果测试通过
  3. 什么是管理的一种更好的方式无论是应用程序二进制和测试二进制在这种情况下

回答

3

单元测试已经克利翁建立两个应用程序二进制和测试二进制文件的 “BUI ld“

在CLion主窗口的右上角,您可以从下拉菜单中选择当前配置。这应该包括您的主要和测试可执行目标,以及称为Build All的特殊配置。

The configuration select drop down

更改为建立所有,它会立刻生成所有目标。请注意,您不能'运行'的构建所有配置,除非您也明确告诉CLion明确您希望它运行在哪里的可执行文件。

只有建立应用程序二进制文件,如果测试通过

这是不可能的。建筑正在建设和运行测试正在运行测试。大楼在运行之前严格遵守。因此,运行的结果不会影响构建,除非您创建一些(非常)精细的样板构造。

什么是在这种情况下

目前双方CMake和克利翁单元测试管理单元测试的一个更好的办法是像任何其他的可执行文件。您可以使用CTest将它们注册为正确的测试,从而为您提供IDE提供的一些不错的附加支持。查看CMake中的enable_testingadd_test命令。