【问题标题】:Structuring C Project with CMake and Clion使用 CMake 和 Clion 构建 C 项目
【发布时间】:2018-03-26 21:51:47
【问题描述】:

我在 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 在“构建”上构建应用程序二进制文件和测试二进制文件
  2. 只有在测试通过时才构建应用程序二进制文件
  3. 在这种情况下管理单元测试的更好方法是什么

【问题讨论】:

    标签: c cmake clion directory-structure


    【解决方案1】:

    让 clion 在其上构建应用程序二进制文件和测试二进制文件 “构建”

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

    将其更改为 Build All,它将一次构建所有目标。请注意,您不能“运行Build All 配置,除非您还明确告诉 CLion 您希望它在此处运行哪个可执行文件。

    只有在测试通过时才构建应用程序二进制文件

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

    在这种情况下管理单元测试的更好方法是什么

    目前,对于 CMake 和 CLion,您的单元测试与任何其他单元测试一样都是可执行文件。您可以使用 CTest 将它们注册为适当的测试,这为您提供了来自 IDE 的一些不错的额外支持。看看 CMake 中的enable_testingadd_test 命令。

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 2018-03-17
      • 2016-06-19
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 2020-07-04
      • 1970-01-01
      相关资源
      最近更新 更多