처음으로 autotools를 사용하고 있습니다 & Cie와 나는 분실했습니다. 나는 openwrt 환경에서 differents 패키지에 약 100 개의 동적 라이브러리를 생성한다. 나중에 바이너리로 dlopen + dlsym을 사용하여 라이브러리를 사용합니다. 이렇게하면 일종의 플러그인 시스템을 사용할 수 있습니다.openwrt config, autotools and library
이제 플러그인 시스템을 사용하지 않고 모든 라이브러리를 정적으로 링크하고 싶습니다. 기본적으로 내 라이브러리 A가 .config 파일에 정의되어 있고 내 바이너리와 링크되어 있다고 말하고 싶습니다. 이제 dlopen 기능을 사용하지 않고 dlsym functionnalities를 사용합니다.
나는 그것을 할 수 있지만 제 생각에는 매우 더러운 방법입니다. 패키지가 내 진 DL 디렉토리에 내 바이너리의
PKG_BUILD_DEPENDS+= +PACKAGE_LIBA:LIBA ifdef CONFIG_PACKAGE_LIBA CONFIGURE_ARGS+= --enable-LIBA endif
- configure.ac의 패키지의 .config 메이크 파일에 정의되어있는 경우
- 내 라이브러리를 사용하여
DL 디렉토리
MYBINARY_LDADD = $ (LIBA_LIBS)
지금, 나는 도서관의 백을 위해 그렇게 할 필요가있는 Makefile.am 내 바이너리
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
- . 게다가 LIBA가 표준 라이브러리를 사용하고 있다면 수동으로 추가 할 필요가 있습니다 ... AUTOtools를 사용하는 것은 정말 아이러니합니다 ... 어쨌든 작동하지만 너무 못생긴 것입니다. 이것의 이점은 수정 만하면됩니다. 내 바이너리 Makefile/configure 및 모든 패키지가 아닙니다. 만약 내가 할 수만 있다면 Makefile만으로 할 수 있지만 여기서 나의 요구 사항 중 하나는 autotools를 사용하는 것이다. 또한 라이브러리를 설명해야하는 pc.in 파일을 사용하여 다른 솔루션을 시도했지만 제대로 사용할 수 없었습니다. 그리고이 솔루션을 따르는 것이 정말 깨끗한 지 확신하지 못했습니다.
감사합니다. 아서.
m4 매크로에 대한 귀하의 조언 주셔서 감사합니다. 지금까지 필자는 openwrt 환경의 .config 파일을 읽고 configure.ac, Makefile 등을 생성하는 쉘 스크립트를 작성했습니다 ... 또한 sed를 사용하여 코드에서 플러그인을 초기화하는 모든 함수를 생성했습니다. 매우 오래되고 큰 프로젝트의 빌드 프로세스를 수정해야 할 때 정말 유용합니다. 게다가 나는 Makefile에서 결코 와일드 카드를 사용하지 않는다. 단지'% .o : % .cpp'와'$ (CC) $ (CFLAGS) -c $ <'가 필요합니다. – ArthurLambert
필자는 주로'autotools'가 어떤 파일이 프로젝트에 속해 있는지 자동으로 추측하려고하지 않을 것이라고 지적하고 싶었습니다. * auto *는 플랫폼 XY에서 프로젝트를 빌드하는 방법을 수학적으로 자동으로 결정하는 방법을 나타냅니다. –