2011-11-22 1 views
1

checkkeys를 실행하기 전에 automake가 라이브러리를 설치하려면 어떻게해야합니까?automake install target을 확인하기 전에

프로젝트는 동적으로로드하는 라이브러리 중 하나 (dlopen 호출)에 대한 모의 테스트 라이브러리를 빌드합니다. 문제는로드해야하는 다른 라이브러리가 여전히 남아 있기 때문에 테스트를 위해 라이브러리 경로를 무시할 수 없다는 것입니다.이 라이브러리는이 makefile에 의해 직접 컴파일되지 않은 다른 구성 요소에 의해 설치됩니다.

체크 스크립트를 실행하기 전에 일부 라이브러리를 설치하면 많은 시간을 절약 할 수 있습니다. 만약 내가 별도의 메이크 파일에 넣고 그 전화를 먼저 괜찮아요, 아무 문제. 본질적으로 나는 옳은 일을하기 위해서 make check을 실행해야합니다.

+0

이 동작은'make check'가 잘못된 것을 많이합니다. 패키지의'make check '는 거의 모든 다른'make check'와 다르게 동작합니다. http://www.gnu.org/prep/standards/html_node/Standard-Targets.html#Standard-Targets : "프로그램이 빌드되었지만 설치되지 않은 경우 작동하도록 자체 테스트를 작성해야합니다." –

+0

이 제품은 불가능합니다. 준비는 여러 개의 종속 프로젝트를 결합하는 것입니다. –

답변

0

공식적/적절한 방법을 찾을 수 없지만 다음과 같이 작동하는 것 같습니다. check에 새 종속성을 추가하고 install library 대상을 사용하지만 어떤 라이브러리가 설치되어 있는지 재정의하십시오. 예 :

check_dummy: lib_LTLIBRARIES = libdummy.la 
check_dummy: install-libLTLIBRARIES 
check: check_dummy 

이 GNU는 구체적으로 생각합니다.

4

make check 대상은 설치하기 전에 패키지를 테스트해야합니다. Automake는이를 해결할 방법이 없습니다. 이 아이디어는 make check이 실패하면 패키지를 전혀 설치하지 않기로 결정할 수 있다는 것입니다. (당신이 make check 중에 설치하는 몇 가지 방법으로 규칙을 해킹하는 경우 또한, 당신은 아마 make distcheck 중단됩니다.)

전에 라이브러리를 설치 한 지역 라이브러리를 사용하는 일반적인 방법은 테스트 동안 LD_LIBRARY_PATH의 값으로 .:을 앞에 추가하는 것입니다. libtool을 사용하여 로컬 라이브러리를 만들고 링크하면 빌드 할 때 실행 파일 libtool 출력은 오른쪽 exectutable (다른 위치에 숨겨진)을 호출하기 전에 이러한 변수를 설정하여 로컬 변수를 사용하도록 보장합니다 라이브러리.

또 다른 해결책은 설치 후 테스트를 수행하려는 경우 make check 대신 make installcheck을 사용하지 않는 것입니다. make installcheck은 사용자가 make install을 실행 한 후에 만 ​​실행될 것으로 예상됩니다. 자신의 installcheck-local 규칙을 작성해야합니다.

+0

"make install"을 최종 패키지로 사용하지 않습니다. 우리는 그것을 설치하여 더 많은 패키지를 준비 할 수 있습니다. 여러 버전의 automake 프로젝트와 버전 의존성이 다른 전역 라이브러리가있는 경우'libtool'도 작동하지 않습니다. –

+0

비슷한 이유로, 버전과 관련하여 LD_LIBRARY_PATH를 사용하여 이러한 라이브러리를로드 할 수는 없으므로 더 제한된 경로 범위가 필요합니다 (단 하나만 지원하지만 현재로서는 더 많은 지원이 필요합니다). –