2017-10-15 7 views
1

je la structure du projet suivante dans Clion:Structuration C Projet avec CMake et Clion

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

Où 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 

Lorsque je construis l'application à partir de Clion, il construit seulement le binaire sans titre d'application, et il ne construit pas le test binaire. Afin de construire le test, je dois créer un répertoire de construction et invoquer cmake et faire à la main.

Je voudrais:

  1. Avez Clion construire à la fois le binaire d'application et binaire de test sur « construire »
  2. construire uniquement binaire si les tests d'application passent
  3. Quelle serait une meilleure façon de gérer tests unitaires dans ce cas

Répondre

3

Avoir Clion construire à la fois le binaire d'application et binaire de test sur « bui ld "

Dans le coin supérieur droit de la fenêtre principale de CLion, vous pouvez sélectionner votre configuration actuelle à partir d'un menu déroulant. Cela devrait inclure à la fois vos cibles exécutables principale et de test, avec une configuration spéciale appelée Build All.

The configuration select drop down

Modifier ce à Construire Tous et construira toutes vos cibles à la fois. Notez que vous ne pouvez pas 'Exécuter' la configuration Build All, sauf si vous indiquez explicitement à CLion quel exécutable vous voulez exécuter ici.

construire uniquement binaire d'application si les tests passent

Ce n'est pas possible. Le bâtiment est la construction et l'exécution des tests est en cours d'exécution des tests. La construction vient strictement avant de courir. Par conséquent, le résultat d'une course ne peut pas influencer la construction, sauf si vous créez une construction standard (très) élaborée.

Quelle serait une meilleure façon de gérer les tests unitaires dans ce cas

Actuellement à la fois CMake et Clion vos tests unitaires sont un exécutable comme les autres. Vous pouvez utiliser CTest pour les enregistrer en tant que tests appropriés, ce qui vous donne un support supplémentaire agréable de l'EDI. Jetez un oeil aux commandes enable_testing et add_test dans CMake.