autotools: не включать библиотеку при выполнении "make check"

Поэтому я пишу тесты для своего кода и хочу прекратить вызовы библиотечных функций (убедитесь, что он вызывает правильные вызовы библиотеки в нужное время и обрабатывает ошибки соответствующим образом).

Я думаю, что я SOL со стандартными библиотечными функциями C, но это не единственные библиотеки, которые я использую.

При сборке моего окончательного исполняемого файла (не моего тестового исполняемого файла) я хочу использовать -lfuseпоэтому я включил эту строку в свой configure.ac

AC_CHECK_LIB([fuse], [fuse_main])

Тем не менее, это также бросает в -lfuse когда он пытается построить мой check_PROGRAMS,

Есть ли способ, которым я могу сказать автоинструментам, что я не хочу -lfuse библиотека при сборке моего тестового исполняемого файла (make check)? Тогда я смогу заглушить вызовы библиотеки, как захочу, так как больше ничего не будет связано с тем же именем.

2 ответа

Решение

Я вижу, что libfuse предоставляет fuse.pc файл в исходном дистрибутиве, поэтому правильный способ проверить это - использовать pkg-config, Ты можешь сделать

PKG_CHECK_MODULES([APPNAME], [fuse ...and any other libraries to check for...])

в вашем configure.ac, а потом

appname_CFLAGS += @APPNAME_CFLAGS@
appname_LIBS += @APPNAME_LIBS@

в src/Makefile.am, Тогда просто не добавляйте эти переменные в свои тестовые программы.

Ладно, думаю, я нашел решение. Я не уверен, что это правильное решение, поэтому я проверю здесь, чтобы узнать, может ли кто-нибудь придумать что-нибудь получше.

Если я изменю действия по умолчанию на успех / неудачу в моем configure.ac в

 AC_SUBST([HAVE_LIBFUSE])
 AC_CHECK_LIB([fuse], [fuse_main], [HAVE_LIBFUSE=1])

А потом вручную добавить -lfuse к моему <appname>_LDADD флаги в src/Makefile.am, тогда он включается только тогда, когда я делаю основной исполняемый файл, и я свободен, чтобы заглушить функции в моих тестах.

По крайней мере, я так думаю, и этого мне достаточно, чтобы двигаться вперед.

Другие вопросы по тегам