이 코드 조각은 다음과 같습니다.
AM_MAINTAINER_MODE
if test "x$enable_maintainer_mode" = xyes; then
AC_PATH_PROG(PERL,perl)
if test -z "$PERL"; then
AC_MSG_ERROR([perl not found])
fi
fi
# This should be checked before AC_PROG_CC
if test "x$CFLAGS" = x; then
default_CFLAGS=yes
fi
if test "x$host_cpu" = xx86_64; then
CFLAGS="-m32 $CFLAGS"
fi
테스트 중인 세 가지 변수(x$enable_maintainer_mode, x$CFLAGS, x$host_cpu)에 대한 정보를 찾을 수 없습니다. AM_MAINTAINER_MODE 매크로를 실행한 후에 이러한 변수가 생성됩니까? 그렇다면, 그들에 대한 더 많은 정보를 어디서 찾을 수 있나요?
또한 AM_MAINTAINER_MODE 모드의 목적은 무엇입니까?
내가 아는 한 기본적으로 비활성화되어 있습니다.
- 사용자가 "configure"를 실행하고 모든 종속성이 충족되지 않으면(Automake 버전, 도구, 라이브러리 등) 종료되고 더 이상 진행되지 않습니다.
- 사용자가 "configure"를 실행하고 모든 종속성이 충족되면 "make" 파일을 생성하는 config.status 스크립트를 생성하고 실행합니다.
- 사용자는 –enable-maintainer-mode 옵션을 사용하여 이 설정을 재정의할 수 있습니다. 이를 통해 다양한 Autotool 파일(예:configure.ac, Makefile.am)을 수정할 수 있으며 빌드 시스템은 이러한 변경 사항을 반영하기 위해 업데이트해야 하는 파일을 다시 생성하려고 시도합니다(Autotools는 오래된 파일을 찾아서 그에 따라 업데이트합니다). ).
이 모드를 비활성화하는 것이 더 나은 이유를 이해합니다. 이 기능을 활성화하려는 이유가 있나요?
답변1
일반적인 아이디어는 AM_MAINTAINER_MODE
프로젝트를 처리하는 두 가지 방법이 있다는 것입니다. 하나는 사용자가 "만" 프로젝트를 빌드 및 설치(소스 기반 아티팩트를 사용한 설치)하고 빌드를 건드리지 않고 프로젝트 코드를 변경할 수 있는 방법입니다. 시스템, 다른 사용자가 빌드 출력에 반영하기를 원하는 프로젝트의 모든 변경 사항입니다.
따라서 비활성화되면 AM_MAINTAINER_MODE
해당 소스 파일(등)이 변경되더라도 등의 파일은 configure
재구축되지 않습니다 . 이것의 장점은 사용자에게 필요한 빌드 도구가 필요하지 않으며 도구 자체에 대한 변경 사항을 처리할 필요가 없다는 것입니다(현재 자동화 도구를 사용하여 오래된 복잡한 프로젝트를 다시 빌드하려고 시도한 사람에게 문의하십시오). 단점은 특정 파일에 대한 변경 사항이 무시되므로 사용자가 해당 파일을 모두 수동으로 업데이트해야 한다는 것입니다. (이것이 인터넷에서 볼 수 있는 많은 패치에 다음과 같은 변경 사항이 포함되어 있는 이유입니다.Makefile.in
configure.ac
Makefile.am
Makefile.am
그리고 Makefile.in
때로는 심지어 Makefile
. )
AM_MAINTAINER_MODE
활성화하면 파일에 대한 모든 변경 사항이 고려된다는 장점이 있습니다. 단점은 사용자가 실제 소스 파일이 무엇인지 알아야 한다는 것입니다. 유지 관리 모드를 변경 Makefile.in
하고 다시 빌드하면 변경 사항이 손실될 수 있습니다!
이제 일반적인 합의는 실제 소스에서 재구축하는 것이 더 좋고 유지관리자 모드는 좋은 생각이 아니라는 것입니다. (자동차 제조업체 FAQ참고용. ) 이는 모든 사용자가 갑자기 재구축에 필요한 모든 도구를 갖추어야 한다는 의미는 아닙니다.모든 것;프로젝트가 릴리스 아티팩트에 생성된 파일을 제공하는 경우 타임스탬프가 양호하다면 사용자는 해당 파일을 다시 빌드할 필요가 없습니다.
답변2
여기의 변수는 "x"가 추가된 쉘 변수입니다.
구성을 위해 --enable-maintainer-mode 옵션을 전달하면 x$enable_maintainer_mode가 xyes로 설정되고, 구성을 위해 --disable-maintainer-mode 옵션을 전달하면 x$enable_maintainer_mode가 xno로 설정됩니다. 그렇지 않으면 변수는 "x"가 됩니다.
CFLAGS 변수는 ./configure CFLAGS='컴파일러 플래그 옵션'을 통해 설정할 수 있습니다. 그렇지 않고 아무것도 설정되지 않은 경우 default_CFLAGS=yes입니다. x$host_cpu는 AC_CANONICAL_HOST 매크로에서 얻을 수 있습니다. 여기에 관련이 있습니다협회host_cpu 및 AC_CANONICAL_HOST 매크로 호출에 사용됩니다.