automake 시스템에서 최상위 디렉토리를 어떻게 정의하나요?

automake 시스템에서 최상위 디렉토리를 어떻게 정의하나요?

나는 일반적으로 makefile을 생성하기 위해 일반적인 단계를 사용합니다. 먼저 "build.sh init"를 사용하여 구성 파일을 생성한 다음 "configure"를 사용하여 makefile 및 makefile.am 파일을 생성합니다. 이제 일부 포함 파일에서 "../../"를 추정하고 싶습니다(예: include "../../dirA/dirB/Ch"). 그냥 include "dirA/dirB/Ch"로 작성하면 됩니다. configure.ac 또는 makefile.am을 수정해야 합니다. 누구든지 이 문제를 해결하는 데 도움을 줄 수 있나요?

답변1

가장 먼저 주목해야 할 점은 구성 시스템에 두 개의 top_dir이 있다는 것입니다. 소스 코드가 있는 최상위 디렉터리와 코드가 생성되는 최상위 디렉터리입니다. 일반적으로 이 두 디렉터리는 동일합니다. 그러나 경우에 따라 소스 코드가 읽기 전용 파일 시스템에 있으므로 다른 곳에서 소프트웨어를 빌드해야 합니다. 아래에서는 최상위 빌드 디렉터리를 사용하겠습니다. 이 디렉터리는 최상위 소스 디렉터리와 동일할 수 있습니다.

autoconf는 이미 최상위 빌드 디렉터리에 대한 여러 변수를 정의합니다. 그 중 하나는 "abs_top_builddir"입니다.

이름이 "abs_top_builddir"인 ​​포함 파일을 사용한다고 가정하면 x.h. x.h.in이 변수는 "@"으로 묶어서 파일에서 참조됩니다. 따라서 다음이 있을 수 있습니다.

#include "@abs_top_builddir@/A/dirB/C.h"

당신이해야 할 또 다른 일은 말해주는 것입니다.구성x.h헤더 파일을 생성하는 스크립트입니다 x.h.in. 추가하면 이렇게 할 수 있습니다.

AC_CONFIG_FILES([x.h])
AC_OUTPUT

끝까지구성 파일. 하나만 필요하므로 AC_OUTPUT행이 이미 존재하는 경우 다시 추가할 필요가 없습니다. 이제 실행 autoconf하여 구성 스크립트를 생성하십시오. 실행 시 다음과 같은 내용 configure이 표시됩니다.

configure: creating x.h

x.h포함 줄이 예상과 일치하는지 확인하세요 .


위의 모든 내용을 작성한 후에는 이것이 일반적으로 수행되는 작업이 아니라는 점도 지적하고 싶습니다. 대신 in CFLAGS또는 비슷한 이름의 변수에 디렉터리만 포함하면 됩니다. 예를 들어 Makefile.am에는 다음이 있을 수 있습니다.

AM_CPPFLAGS = -I$(top_srcdir) 

여기서는 다음으로 전환합니다.소스 디렉토리이전처럼 헤더를 만들 필요가 없기 때문입니다. 아마도 추가 줄을 추가할 필요가 없을 것입니다.구성 파일그 줄은 아마도 이미 거기에 있을 것이기 때문입니다.

관련 정보