Я перешел на gradle как мою новую систему сборки для C ++ (хотя я ранее использовал ее с java). Теперь, когда я пытался связать CUnit для тестовых случаев с файлом сборки, например
apply plugin: 'cpp'
apply plugin: 'cunit'
model {
platforms {
x64 {
architecture "x86_64"}
}
repositories {
libs(PrebuiltLibraries) {
cunit {}
}
}
components {
smartio(NativeLibrarySpec) {
targetPlatform "x64"sources {
cpp {
source {
srcDir 'src/smartio/cpp'
include '**/*.cpp'
}
exportedHeaders {
srcDir 'src/smartio/headers'
}
}
}
}
}
binaries {
all {
cppCompiler.args "-std=c++1y"}
withType(CUnitTestSuiteBinarySpec) {
lib library: "cunit", linkage: 'api'
}
}
}
Я все еще получаю следующий вывод из Gradle:
D:\\devel\\git\\SmartIO\\build\\objs\\smartioTestCUnitExe\\smartioTestCpp\\102afk7z0mm9rbcvlxwqfb3lp\\CUnitMain.obj:CUnitMain.cpp:(.text+0x4b): undefined reference to `CU_assertImplementation'
D:\\devel\\git\\SmartIO\\build\\objs\\smartioTestCUnitExe\\smartioTestCpp\\102afk7z0mm9rbcvlxwqfb3lp\\CUnitMain.obj:CUnitMain.cpp:(.text+0x4b): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `CU_assertImplementation'
// ... omitted for brevity
D:\\devel\\git\\SmartIO\\build\\objs\\smartioTestCUnitExe\\smartioTestCunitLauncher\\e5tc4yn4yrorgux3jajanhtly\\gradle_cunit_main.obj:gradle_cunit_main.c:(.text+0x22): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `CU_get_number_of_failures'
D:\\devel\\git\\SmartIO\\build\\objs\\smartioTestCUnitExe\\smartioTestCunitLauncher\\e5tc4yn4yrorgux3jajanhtly\\gradle_cunit_main.obj:gradle_cunit_main.c:(.text+0x3c): undefined reference to `CU_get_failure_list'
По сути, это говорит мне о том, что gradle не может найти библиотеку, но не хочет мне об этом рассказывать. Однако, когда я собираю его с консоли, все работает нормально. Мой пример тестового файла, ничего особенного:
#include <CUnit/Basic.h>
#include <CUnit/CUnit.h>
#include <CUnit/Console.h>
int suite_init(void) {
return 0;
}
int suite_clean(void) {
return 0;
}
void test_example(void) {
CU_ASSERT(3 == 2);
}
void gradle_cunit_register() {
CU_pSuite mySuite = CU_add_suite("operator tests", suite_init, suite_clean);
CU_add_test(mySuite, "test", test_example);
}
#ifdef OUTSIDE_GRADLE
int main() {
CU_initialize_registry();
gradle_cunit_register();
CU_console_run_tests();
}
#endif
Может кто-нибудь сказать мне, что мне не хватает и как я могу использовать версию cunit, которая предустановлена в моей системе?
Задача ещё не решена.
Других решений пока нет …