루트 권한이 없는 컴퓨터에 Bison을 설치하고 싶습니다. 을(를 ) 사용하려고 하면 configure
다음 오류가 발생합니다.
checking for GNU M4 that supports accurate traces... configure: error: no acceptable m4 could be found in $PATH.
GNU M4 1.4.6 or later is required; 1.4.16 or newer is recommended.
GNU M4 1.4.15 uses a buggy replacement strstr on some systems.
Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 have another strstr bug.
내 M4 버전이 1.4.13이라는 것을 알았습니다. 내 홈 폴더에 최신 버전(1.4.17)을 설치했고 configure
이 로컬 버전을 사용하고 싶었는데, 구성 스크립트에서 다음을 찾았습니다.
M4 Location of GNU M4 1.4.6 or later. Defaults to the first program
of 'm4', 'gm4', or 'gnum4' on PATH that meets Autoconf needs.
그래서 다음 명령을 사용했습니다.
../configure --prefix=$HOME/local/bison M4='$HOME/local/m4/bin/'
저는 이것이 가능하다고 생각합니다(틀렸다면 정정해 주십시오).
나중에 다음 오류가 발생했습니다.
checking for flex... flex
checking whether lex is flex... no
checking lex output file root... lex.yy
checking lex library... none needed
checking whether yytext is a pointer... no
configure: error: Flex is required
flex를 로컬에 설치 $HOME/local/flex
하고 변수를 수정해 보았습니다 PATH
.
PATH=$HOME/local/flex/bin/:$PATH
, 하지만 여전히 같은 오류가 발생합니다. 그래서 이 위치를 사용하도록 구성에 지시하는 방법을 모르겠습니다. 이번에는 이전처럼 옵션이 없다고 생각합니다 m4
. 존재한다고 해도 configure
임의의 프로그램을 찾을 위치를 지정할 수 있다면(바람직하게는 보다 우선순위가 높음 /usr/bin
) 여전히 관심이 있을 것입니다.
답변1
당신은 가깝습니다.
먼저, M4
변수는 해당 파일이 있는 디렉터리가 아닌 실제 M4 프로그램 파일의 경로로 설정되어야 합니다. 아마도 귀하의 경우보다 더 일반적으로 사용되므로 PATH
실제 실행 파일의 이름을 지정해야 합니다. BSD 유형 운영 체제에서는 먼저 플랫폼을 갖고 m4
그 다음 GNU M4 프로그램( gm4
예: . GNU Bison을 빌드할 때 M4의 GNU 버전을 사용하고 싶을 수도 있습니다. 이 변수를 사용하면 그렇게 할 수 있습니다. 그렇지 않으면 예제 시스템에서 스크립트는 BSD 버전을 먼저 찾습니다.
둘째, 귀하의 편집 내용이 무시된 것 같습니다 PATH
. export
를 실행 하지 않는 한 새 값은 셸에서만 사용할 수 있습니다 PATH
. 이 문제를 해결하는 방법에는 두 가지가 있습니다.
export PATH=$HOME/local/flex/bin/:$PATH
또는:
PATH=$HOME/local/flex/bin/:$PATH ../configure --flags-and-stuff-here
두 번째 버전에서는 스크립트만 변경되었습니다 configure
. 스크립트에 의해 시작된 모든 프로그램은 다음이 PATH
아니면 변경 사항을 볼 수 없습니다.그것새 값을 내보냅니다.
~/.bash_profile
개인적으로 는 Bison을 설치한 후 개인용 Flex 버전을 사용할 수도 있기 때문에 시작 스크립트에서 첫 번째 접근 방식(예: )을 사용하겠습니다 . 로그아웃했다가 다시 로그인한 후 실행하여 flex
테스트해 보세요. 이것이 작동하면 Bison configure
스크립트도 해당 버전을 먼저 찾아야 합니다.