Я использую впервые autotools & Cie и я потерян. Я генерирую около ста динамических библиотек в среде openwrt в разных пакетах. Позже в двоичном формате я использую dlopen + dlsym для использования моей библиотеки. Это позволяет мне использовать систему плагинов.openwrt config, autotools и library
Теперь я хотел бы иметь возможность связывать все мои библиотеки статически вместо использования моей системы плагинов. В основном я хотел бы сказать, если моя библиотека A определена в моем файле .config, соедините ее с моим двоичным кодом. Так что теперь я просто использую dlsym functionnality без использования функции dlopen.
Я могу это сделать, но, на мой взгляд, очень грязно.
- Используйте мою библиотеку, если пакет определен в .config Makefile пакета моего бинарного
PKG_BUILD_DEPENDS+= +PACKAGE_LIBA:LIBA ifdef CONFIG_PACKAGE_LIBA CONFIGURE_ARGS+= --enable-LIBA endif
- configure.ac моего двоичном в дл директории
AC_ARG_ENABLE([LIBA], [AS_HELP_STRING([--enable-LIBA], [Enable link with LIBA (default no)])], [ if test x"$enableval" = "xno" ; then LIBA="0" ; else LIBA="1" ; fi ], [LIBA="0"]) if test "$LIBA" = "1" ; then [LIBA="-la"] AC_SUBST([LIBA_LIBS]) fi
- Makefile.am моего двоичном в дл директории
MYBINARY_LDADD = $ (LIBA_LIBS)
Теперь мне нужно сделать это для сотен библиотек. Более того, если LIBA использует, например, стандартную библиотеку, мне нужно добавить ее вручную ... Довольно иронично использовать AUTOtools, как это ... В любом случае это работает, но так уродливо. Преимущество этого в том, что мне нужно только модифицировать мой двоичный файл Makefile/configure, а не все пакеты. Если бы я мог это сделать только с Makefile, но одно из моих требований здесь - использовать autotools. Я также попробовал другое решение с файлом pc.in, где мне нужно описать мою библиотеку, но я не смог правильно ее использовать. И не уверен, что было действительно чисто следовать этому решению.
Thanks, Arthur.
Спасибо, что вы посоветуете с макросом m4, я проверю его. До сих пор я написал сценарий оболочки, который читал мой .config моей среды openwrt и генерировал configure.ac, Makefile и т. Д. Я также использовал sed для генерации всей функции для инициализации моего плагина в моем коде. Это очень полезно, когда вам нужно изменить процесс сборки очень старого и большого проекта. Более того, я никогда не использую шаблон в Makefile. Просто нужна одна строка: '% .o:% .cpp' и' $ (CC) $ (CFLAGS) -c $ <'. – ArthurLambert
Мне в основном хотелось указать, что 'autotools' не будет пытаться * автоматически * угадать, какие файлы принадлежат вашему проекту. * auto * относится к тому, как это будет * автоматически * математически выяснить, как построить свой проект на платформе XY (о котором вы, возможно, никогда не слышали). –