2017-10-15 76 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命令。