2011-09-19 2 views
3

생성 메이크 파일이 g ++에 대한 특정 헤더 경로를 전달하게하고 싶다고 가정 해 봅시다.autoconf/automake를 사용하면 include 파일 경로를 어떻게 지정합니까?

이것을 지정하려면 configure.ac 또는 Makefile.am에 무엇을 추가해야합니까?

(주 - 나는 ./configure를 함께 CPPFLAGS에 통과하고 싶지 않아 내가 그 단계 이전에 구운 그 경로합니다.)

편집 :의 말을하자 포함하는 은 특히, 내가 원하는을은/usr/include/freetype 및/mypath/include.

나는 AC_CHECK_HEADERS ([freetype/config/ftheader.h])를 넣었지만 패스했지만 g ++에 전달 된 -I에 추가하지 않는 것 같습니다.

또한 CPPFLAGS = -I : :/usr/include/freetype :/mypath/include를 추가하려고했지만 -I로 두 번, -I를 두 번 넣었습니다. 두 번째 -I를 무시합니다.

+1

이것은 잘못된 행동입니다. './ configure'는 컴파일중인 시스템에있는 것들을 파악하는 단계이기 때문에 컴파일하는 사용자가 헤더 경로의 기본이 아닌 위치를 알려주는 단계이기도합니다. – reinierpost

+1

CPPFLAGS는 콜론으로 구분 된 목록이 아닙니다. CPPFLAGS = '- I/usr/include/freetype -I/mypath/include'를 입력하십시오. –

답변

8

하드 코딩 경로를 패키지 파일로하는 것은 할 수 절대적으로 잘못된 것입니다. 그렇게하기로 한 경우 autotools를 사용하여 패키지를 빌드하는 기본 규칙을 위반하고 있음을 인식해야합니다. 패키지 파일에/mypath/include를 지정하면, 모든 기계에서 작동하도록 의도 된 패키지의 특정 기계에 대한 사항을 지정하게됩니다. 분명히 틀렸다./mypath에서 헤더 파일을 찾기 위해 패키지에 (머신에 빌드 할 때) 원하는 것처럼 보입니다. 패키지를 파괴하지 않고도 쉽게 달성 할 수 있습니다. 그것을하기위한 (적어도) 3 가지 방법이 있습니다 :

1) config.site 파일을 사용하십시오. /usr/local/share/config.site에 추가 라인을 (이 파일 필요한 경우 생성) :

 
CPPFLAGS="$CPPFLAGS -I/mypath/include" 
이제

의 autoconf를 사용하는 패키지는 기본 접두어 (/ usr/지방)과 스크립트를 구성 생성 된 것 -I/mypath/include를 CPPFLAGS에 추가하면/mypath/include의 헤더가 발견됩니다.

2) 당신은 단지 그가에 설치할 수 없습니다 (모두 만들 수있는 과제 빌드하려면 /) 지역은/usr, 당신이 사용할 수 있습니다 : $ 홈에 CPPFLAGS을 지정 같은 라인을 넣어

를/config.site로 설정하고 기본 쉘 환경에서 CONFIG_SITE = $ HOME/config.site를 설정하십시오. 이제 autoconf 생성 configure 스크립트를 실행할 때마다 $ HOME/config.site의 할당이 만들어집니다.

3) 기본 셸 환경에서 CPPFLAGS를 지정하기 만하면됩니다.

이러한 모든 솔루션에는 빌드 파일을 수정하는 것보다 두 가지 주요 이점이 있습니다. 첫째, 모든 autoconf 생성 패키지에서 작동합니다 (규칙을 따르고 CPPFLAGS와 같은 사용자 변수를 빌드 파일에 할당하는 것과 같은 일을하지 않는 한). 둘째, 모든 컴퓨터에서 작동해야하는 패키지에 컴퓨터 별 정보를 저장하지 않습니다.

+0

좋은 소리지만, ... configure가 생성 한 Makefile이 주변 CFLAGS 또는 CPPFLAGS env 변수를 참조하지 않는 컴파일 문을 생성 중입니다. – Cheeso

+0

패키지가 automake를 사용하여 빌드 된 경우, 기본 규칙은 적절한 장소에'$ (CFLAGS)'및'$ (CPPFLAGS)'가 있어야합니다. 그렇지 않으면 패키지 관리자가 automake를 심각하게 악용합니다. 아마도 여러분이보고있는 패키지는'Makefile.in'으로 작성된 손을 사용했을 것입니다. –

8

automakefile에 무엇을 넣어야할지에 대한 질문이 있었기 때문에, AM_CPPFLAGS은 include를 추가하는 데 사용할 올바른 변수이고 모든 C/C++ 컴파일러를 정의한다고 생각했을 것입니다. http://www.gnu.org/software/automake/manual/html_node/Program-Variables.html

예를 참조하십시오

AM_CPPFLAGS = -I/usr/local/custom/include/path 
+0

이 질문에 대한 가장 직접적인 실제 답변에 동의합니다. Makefile.am과 같은 라인을 추가하기 만하면 빌드 대상에 대한 사용자 정의 include 경로를 지정할 수 있습니다. – Tchakabam

관련 문제