문제

libtool을 프로그램의 소스 트리에 복사하여 프로그램에 배포했습니다. 그러나 내가 실행할 때 'make distclean'libtool은 나머지 나머지 생성 파일로 삭제됩니다. 그 일이 일어나지 않도록하려면 어떻게해야합니까?

나는 퍼팅을 시도했다 EXTRA_DIST = libtool makefile.am에서는 작동하지 않습니다.

다음은 기본적으로 내 configure.ac의 모습입니다.

AC_PREREQ(2.53)
AC_INIT( [program], [0.16], [program] )
AC_CONFIG_SRCDIR([src/c/program.c])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_AUX_DIR(build-aux)
AM_INIT_AUTOMAKE( [-Wall -Werror foreign] )

m4_include(ax_pkg_swig.m4)

# Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL
AC_ENABLE_SHARED
AC_PROG_SWIG

# Checks for libraries.

# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h string.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_SIZE_T

# Checks for library functions.
AC_REPLACE_FNMATCH
AC_FUNC_MALLOC
AC_FUNC_STAT
AC_CHECK_FUNCS([regcomp strdup strtoull])

AC_CONFIG_FILES([
    Makefile
    src/c/Makefile
    src/perl/Makefile
    src/verilog/Makefile
])
AC_OUTPUT
도움이 되었습니까?

해결책

당신은 복사해서는 안됩니다 libtool 귀하의 프로그램 디렉토리에 손으로. 당신은 달린다 libtoolize 부트 스트랩 스크립트 에서이 문제를 처리합니다. Automake에게 파일을 삭제해서는 안된다는 것을 알리는 것과 같이 Libtool을 복사하는 것 이상을 수행한다고 생각합니다. 다음은 샘플 부트 스트랩 스크립트입니다.

#!/bin/sh
aclocal -I config &&
    libtoolize --force --copy &&
    autoheader &&
    automake --add-missing --copy --foreign &&
    autoconf &&
    ./configure -C "$@"

이 스크립트는 전통적으로도 호출됩니다 bootstrap 또는 autogen.sh. 이 이름은 보편적이지 않습니다. 며칠 전, 나는 bootstrap.sh, 예를 들어.

대체로 대본의 이름은 패션과 스타일의 문제입니다. 현대 스타일의 일부가 달리기에서 멀어지기 때문에 완전히 피상적이지는 않습니다. configure 스크립트의 끝에서. bootstrap 최신 이름이므로 실행 가능성이 적은 스크립트 configure 결국. 오토 북 8 장 이것이 사실이라는 것을 암시하지만, 나는 반음을 가로 질러 달려갑니다. (즉, 프로젝트 autogen.sh 전화하지 않는 스크립트 configure, 및 프로젝트 a bootstrap 그 대본.)

내 마음에 configure 결국 단계는 프로젝트의 사용 사례가 얼마나 일반적인 지로 이어집니다. 프로젝트의 빌드 트리를 부트 스트랩 해야하는 거의 모든 사람이 표준을 수락합니다. configure 부트 스트랩 스크립트에 정의 된 플래그 또는 두 개의 간단한 스크립트를 추가하면 실행하는 것이 좋습니다. configure 자동으로. 많은 사람들이 무거운 사용자 정의를해야한다면 별도의 수동 단계로 만드는 것이 가장 좋습니다. 예를 들어 많은 사용자가 크로스 컴파일 귀하의 프로젝트. 물어볼 방법 configure 이를 위해서는 잘 알려져 있지만 누군가는 부트 스트랩 스크립트 코드를 읽어야합니다. configure 명령.

이 스크립트를 프로젝트의 요구에 맞게 사용자 정의해야합니다. AS-IS를 떠나는 가장 중요한 것은 운영 순서입니다. Autotools는 그것에 민감합니다. 명령이 주어지면 깃발을 변경해야 할 수도 있습니다. 그만큼 -I configaclocal 예를 들어 명령은 보편적이지 않습니다. 이러한 일반적인 단계를 둘러싼 프로세스에 단계를 추가하거나 심지어 인터 리테일을 추가해야 할 가능성이 더 높습니다.

에 관해서 그만큼 autoreconf 옵션, 나는 아직 팬이되지 않았다. 내 내장 가정이 모든 프로젝트에서 어떻게 든 무너진다는 것을 알았습니다. 프로젝트가 Bog-Standard GNU 스타일 프로젝트 인 경우 귀하에게 효과적 일 수 있습니다.

그건 그렇고, AC_PROG_LIBTOOL 매크로입니다 쓸모없는. 당신은 사용해야합니다 LT_INIT 대신에.

다른 팁

실제로, 당신은 모든 aclocal 및 libtoolize 및 autoheader를 호출 할 필요가 없습니다.

그냥 전화하십시오

$ autoreconf -i

AutoreConf는 aclocal, libtoolize (configure.ac에 libtool macros가있는 경우), Automake (configure.ac가 Automake와 관련된 경우) 및 autoconf를 실행합니다. 소스 트리에 추가 해야하는 모든 파일은 거기에 복사됩니다.

나는 보통 약간의 Verbosity (-v)를 추가하고 파일을 복사하는 대신에 동성애를하여 표준 호출을 초래합니다.

$ autoreconf -vis

"구성"실행에 의해 생성 된 "libtool"파일은 구성 실행이 발생한 시스템에만 해당되므로 물론 "Make Distclean"으로 다시 정리 될 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top