Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用CMake和Clion构建C项目_C_Cmake_Clion_Directory Structure - Fatal编程技术网

用CMake和Clion构建C项目

用CMake和Clion构建C项目,c,cmake,clion,directory-structure,C,Cmake,Clion,Directory Structure,我在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)

我在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})
主要条款c:

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

int main() {
  printf("Hello, World!\n");
  print_hello();
  return 0;
}   
当我从clion内部构建应用程序时,它只构建未命名的 应用程序二进制文件,它不构建测试二进制文件。为了建造 在测试中,我必须创建一个构建目录并手动调用cmake和make

我想:

  • 让clion在“build”上同时构建应用程序二进制文件和测试二进制文件
  • 仅当测试通过时生成应用程序二进制文件
  • 在这种情况下,管理单元测试的更好方法是什么
  • 让clion在上构建应用程序二进制文件和测试二进制文件 “构建”

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

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

    仅当测试通过时生成应用程序二进制文件

    这是不可能的。构建就是构建,运行测试就是运行测试。施工前必须严格把关。因此,运行的结果不会影响构建,除非您创建一些(非常)复杂的样板结构

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

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

        #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);
        }
    
        #include <stdio.h>
        #include "func1.h"
    
        int print_hello(){
          printf("hello");
          return 0;
        }
    
        #ifndef UNTITLED_FUNC1_H
        #define UNTITLED_FUNC1_H
    
        int print_hello();
    
        #endif //UNTITLED_FUNC1_H