Я хотел создать проект, использующий библиотеку тестирования Criterion , и я использую мезон для его создания. Я могу создать свой собственный код, библиотеку stati c, которая использует только стандартные библиотеки c. Модульные тесты основаны на #include <criterion/criterion.h>
. Если я попытаюсь загрузить бинарный архив и включить его в файл meson.build, я не смогу успешно собрать проект. Я полагаю, что не правильно закрепляю мезон. Я новичок в Мезон, так что я не уверен, в чем дело. Я ошибаюсь.
meson.build ,
project('is_substring', 'c')
static_library(
'is_substring',
'is_substring.h',
)
executable(
'test_is_substring',
'is_substring.test.c',
include_directories: include_directories(
'libs/criterion-v2.3.3',
),
#dependencies: [
# dependency('criterion')
#]
)
Структура проекта ,
▸ builddir/
▸ libs/criterion-v2.3.3/
is_substring.h
is_substring.test.c
meson.build
и двоичный архив Criterion tar.bz2 извлечен в ./libs
,
▾ libs/criterion-v2.3.3/
▾ include/criterion/
▸ internal/
abort.h
alloc.h
assert.h
criterion.h
event.h
hooks.h
logging.h
options.h
output.h
parameterized.h
redirect.h
stats.h
theories.h
types.h
▾ lib/
libcriterion.so
libcriterion.so.3
libcriterion.so.3.1.0
▾ share/pkgconfig/
criterion.pc
is_substring.test. c,
#include "criterion/criterion.h"
#include <stdbool.h>
#include <stdio.h>
#include "is_substring.h"
Test(is_substring, is_substring)
{
cr_assert(is_substring("aaa", "a") == true);
}
is_substring.h ,
#include "stdbool.h"
bool is_substring(const char *fullstr, const char *substr)
{
return true;
}
Ошибка при попытке построить:
francium@4ab5198f934f:/mnt/c/brute-force/builddir$ ninja
[1/2] Compiling C object 'test_is_substring@exe/is_substring.test.c.o'.
FAILED: test_is_substring@exe/is_substring.test.c.o
cc -Itest_is_substring@exe -I. -I.. -I../libs/criterion-v2.3.3 -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -g -MD -MQ 'test_is_substring@exe/is_substring.test.c.o' -MF 'test_is_substring@exe/is_substring.test.c.o.d' -o 'test_is_substring@exe/is_substring.test.c.o' -c ../is_substring.test.c
../is_substring.test.c:1:10: fatal error: criterion/criterion.h: No such file or directory
#include <criterion/criterion.h>
^~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
ninja: build stopped: subcommand failed.
francium@4ab5198f934f:/mnt/c/brute-force/builddir$
Как указано @jonathan -leffler в комментариях, эта команда g cc работает, правильно компилирует и связывает,
gcc -o is_substring.test is_substring.test.c -I libs/criterion-v2.3.3/include/ -Llibs/criterion-v2.3.3/lib -lcriterion