2010-11-30 4 views
2

Autotools 프로젝트에 헤더 전용 C++ 라이브러리를 통합하려고합니다. 라이브러리는 Autoconf와 Automake를 사용하기 때문에 AC_CONFIG_SUBDIRSconfigure.ac에 사용하고 SUBDIRS = 라인의 Makefile.am에 라이브러리 디렉토리를 추가했습니다.autotools 프로젝트에 (헤더 전용) 라이브러리 포함

제 질문은 헤더 라이브러리가 make install에 의해 설치되는 것을 어떻게 막을 수 있습니까? 나는 하나의 바이너리를 만들고 있기 때문에 사용자들은이 헤더를 필요로하지 않는다.

라이브러리를 변경하지 않으려 고하므로 새 버전을 압축 해제하여 업그레이드를 가져올 수 있습니다.

답변

0

SUBDIRS을 사용하지 마십시오. 라이브러리 프로젝트의 외부에 자신의 디렉토리에 남아있는 경우 물론

 
all-local: 
     ${MAKE} -C thatlib all 

그것이 가장 좋은 것입니다, 당신은 단지 CFLAGS/LIBS 플래그를 통해 가리 다음 해킹 작동 할 수 있습니다.

+1

외부 트리를 유지하고 싶지만 외부 종속성을 줄이려고합니다. 고마워, 이것을 시도 할 것이다. –

+0

작동하지 않습니다. 내 프로그램이 끝난 후 라이브러리가 빌드됩니다. 분명히 작동하지 않습니다. –

2

다음은 아이디어입니다.

설치하지 않을 모든 타사 라이브러리를 noinst/이라는 하위 디렉토리로 이동하십시오. 예를 들어 Boost와 같은 프로젝트를 출하하려면 noinst/boost/ 디렉토리에 압축을 풉니 다. AC_CONFIG_SUBDIRS([noinst/boost])을 사용하십시오. noinst/Makefile.am 내부, 같은 것을 할 :

SUBDIRS = boost 
# Override Automake's installation targets with the command ":" that does nothing. 
install:; @: 
install-exec:; @: 
install-data:; @: 
uninstall:; @: 

효과는 재귀 중 일부는 명령 최상위 디렉토리에서 실행됩니다 "설치 제거하기"또는 "*를 설치하게"할 때마다, 재귀가 noinst/에 중지 것입니다 하위 디렉토리를 방문하지 마십시오. 다른 재귀 명령 (예 : "make", "make clean"또는 "make dist")은 하위 디렉토리로 반복됩니다.

물론 install: 및 친구들을 타사 패키지에 직접 무시하고 noinst/ 디렉토리를 피할 수 있습니다. 그러나 나 같은 사람이라면 업데이트를 쉽게하기 위해 제 3 자 패키지를 변경하고 싶지 않을 것입니다. 또한 위의 설정의 좋은 속성은 누군가가 noinst/boost/에 들어가고 make install을 실행하기로 결정하면 작동합니다. 패키지를 설치할 때 기본적으로 나타나지 않습니다.

1

는 비슷한 문제를 가로 질러 와서 automake manual에서 솔루션을 발견 :

noinst_HEADERS 오른쪽 변수는 헤더를 포함하는 디렉토리에 사용하는 것없이 관련 라이브러리 나 프로그램

을 Andreas

관련 문제