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
, тогда он включается только тогда, когда я делаю основной исполняемый файл, и я свободен, чтобы заглушить функции в моих тестах.
По крайней мере, я так думаю, и этого мне достаточно, чтобы двигаться вперед.