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:
- Avez Clion construire à la fois le binaire d'application et binaire de test sur « construire »
- construire uniquement binaire si les tests d'application passent
- Quelle serait une meilleure façon de gérer tests unitaires dans ce cas