簡體   English   中英

使用CMake和Clion構建C項目

[英]Structuring C Project with CMake and Clion

我在clion中有以下項目結構:

├── 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

當我從clion中構建應用程序時,它只構建無標題的應用程序二進制文件,並且它不構建測試二進制文件。 為了構建測試,我必須創建一個構建目錄並手動調用cmake和make。

我想要:

  1. 讓clion在“build”上構建應用程序二進制文件和測試二進制文件
  2. 只有在測試通過時才構建應用程
  3. 在這種情況下,管理單元測試的更好方法是什么

讓clion在“build”上構建應用程序二進制文件和測試二進制文件

在CLion主窗口的右上角,您可以從下拉菜單中選擇當前配置。 這應包括主要和測試可執行目標,以及名為Build All的特殊配置。

配置選擇下拉列表

將其更改為Build All ,它將立即構建所有目標。 請注意,您不能“ 運行Build All配置,除非您還明確告訴CLion您希望在此處運行哪個可執行文件。

只有在測試通過時才構建應用程

這是不可能的。 構建正在構建並且運行測試正在運行測試。 建築在運行前嚴格要求。 因此,運行的結果不會影響構建,除非您創建一些(非常)復雜的樣板構造。

在這種情況下,管理單元測試的更好方法是什么

目前,對於CMake和CLion,您的單元測試都是可執行的,與其他測試一樣。 您可以使用CTest將它們注冊為正確的測試,這為您提供了一些來自IDE的額外支持。 看看CMake中的enable_testingadd_test命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM