2009-02-04 5 views
10

내가 gtkmm.h/usr/include/gtkmm-2.4/gtkmm.h되는g 모두는/usr/재귀

#include <gtkmm.h> 

경로와 간단한 프로그램을 컴파일하기 위해 노력하고있어 있습니다. g ++은 특별히 -I /usr/include/gtkmm-2.4이라고 말하지 않으면이 파일을 볼 수 없습니다.

내 질문에, 그 안에 포함 된 모든 헤더 파일에 대해 /usr/include에있는 모든 디렉토리를 통해 g ++가 자동으로 재귀 적으로 보이게 할 수 있습니다. 왜 이것이 기본 동작이 아닌가요?

답변

16

, 할 수있는 올바른 것은 당신의 Makefile 또는 buildscripts에서 pkg-config을 사용하는 것입니다 : 당신이 gtkmm-2.4 누락하는 경우

# Makefile 
ifeq ($(shell pkg-config --modversion gtkmm-2.4),) 
    $(error Package gtkmm-2.4 needed to compile) 
endif 

CXXFLAGS += `pkg-config --cflags gtkmm-2.4` 
LDLIBS += `pkg-config --libs gtkmm-2.4` 

BINS = program 
program_OBJS = a.o b.o c.o 

all: $(BINS) 

program: $(program_OBJS) 
     $(CXX) $(LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o [email protected] 

# this part is actually optional, since it's covered by gmake's implicit rules 
%.o: %.cc 
     $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o [email protected] 

,이 생산됩니다

$ make 
Package gtkmm-2.4 was not found in the pkg-config search path. 
Perhaps you should add the directory containing `gtkmm-2.4.pc' 
to the PKG_CONFIG_PATH environment variable 
No package 'gtkmm-2.4' found 
Makefile:3: *** Package gtkmm-2.4 needed to compile. Stop.

그렇지 않으면 직접 모든 것을 지정하지 않고도 적절한 경로와 라이브러리를 가져올 수 있습니다. (pkg-config --cflags --libs gtkmm-2.4의 출력을 확인하십시오 : 이것은 수동으로 입력하는 것보다 훨씬 더 많습니다.)

+1

방금 ​​전에 읽었던 새로운 두통이 생겼습니다. 좋아, 고마워. – endeavormac

1

수 없습니다. 경로를 포함하는 전체 요점은 당신이 원하는 것을 선택하고 선택할 수 있습니다. 같은 효과를 얻을 것입니다 당신이 할 수

..

#include <gtkmm-2.4/gtkmm.h> 

.

+1

이 문제는 gtkmm.h 자체가 g ++의 경로와 관련된 다른 헤더를 포함한다는 것입니다. 찾을 수 없습니다 .. :/. 그것은 자극적이다. gtkmm.h의 모든 경로를 바꿀 수 있지만 다른 솔루션을 기대하고 있습니다. – endeavormac

+0

@endeavormac : gtkmm.h에 어떤 형태로 포함됩니까? 기본적으로, 당신은 -I를 통해 gtkmm.h가있는 디렉토리를 지정해야하며, 그럴 경우, 대부분 올바르게 작동 할 것입니다. 그것 없이는 그렇지 않을 것입니다. 원하는 경우 전체 정류장 또는 기간. 왜 디자인과 싸우고 싶습니까? –

+0

Jon이 말한 내용은 다음과 같습니다. –

2

메이크 파일을 사용하고 있지 않습니까? 짜증나게 할 수있는 유일한 방법은 프로그램을 컴파일 할 때마다 길 때 -I 옵션 을 입력해야합니다. makefile은 훨씬 쉽게 만듭니다.

예를 들어, 당신이 좋아하는 뭔가 wikipedia에서 안녕하세요 세계 메이크 파일을 수정할 수 있습니다 다음 :이 경우

INC=-I/usr/include/gtkmm-2.4/ 

helloworld: helloworld.o 
    g++ -o [email protected] $< 

helloworld.o: helloworld.c 
    g++ $(INC) -c -o [email protected] $< 

.PHONY: clean 

clean: 
    rm -f helloworld helloworld.o