2012-11-17 4 views
4

나는 C++ 헤더 전용 라이브러리를 개발 중입니다. PROJ으로 전화를 걸 수 있습니다. 라이브러리 헤더가 다른 포함되면 사용포함 파일 이름에 프로젝트 디렉토리 사용

#include <proj/foo.h> 

그리고 컴파일러 (GCC와 그 소리가) -I path-to-proj-parent 있습니다. 라이브러리 사용자는 부모 검색 경로에 PROJ이 있어야합니다.

이성적으로이 방식을 사용하기위한 기본-seachable 부모 (/usr/include/proj 또는 /usr/local/include/proj)의 proj 하위 디렉토리에이 라이브러리를 설치 한 후, 라이브러리 사용자가 -I 옵션을 지정할 필요가 없다는 것입니다 내.

이 계획에는 단점이 있습니까? <foo.h>을 사용하지 않고 proj/ 접두사는 더 일반적이며 권장되는 방법입니까?

서브 디렉토리에 설치할지 여부 (부속 디렉토리 proj)가 아니라 인클루드 파일을 참조하는 방법에 관한 질문입니다.

+1

예제로 증명 :'#include ' –

+0

@MatthieuM. - 대답이라면 그 대답을 받아 들일 것입니다. –

+0

조금 더 개선해야 할 것입니다. 대답은 매우 짧습니다.) –

답변

3

당신이 부스트를 보면, 당신은 그들이 유사한 체계 사용을주의 할 것이다 :..

#include <boost/shared_ptr.hpp> 

그것은 또 다른 의존성에서 다른 비슷한 이름의 파일과 충돌을 방지하는 장점이있다.

을하지만, 부스트의 경우, 그들은 당신이 <x/y/z.hpp> 포함하는 경우에, 당신이 처리 될 가능성이 있습니다. 한 단계 더 받아 전자 이름은 ::x::y::z (함수 또는 클래스)이어야합니다. 즉, 프로젝트의 디렉토리가 네임 스페이스 구성을 모방하는 방식입니다. 정말 자신을 방향 지키는 것이 아주 산뜻합니다.

일반적으로 대부분의 프로젝트는 하위 디렉터리 (및 하위 네임 스페이스)에 숨겨져 있지만 가장 많이 사용되는 프로젝트는 boost 네임 스페이스에 편의적으로 가져 오므로 boost 폴더에 직접있는 헤더가 있습니다. 또한 편의 헤더가 있습니다 (모든 헤더를 모아 한꺼번에 가져 오는 것).

당신이 헤더 파일을 열 경우들이 the exact same hierarchy에 따라 사용하는 경비를 포함하는보다 당신이 마지막으로주의 할 수 있습니다

#ifndef BOOST_SHARED_PTR_HPP_INCLUDED 

을 다시 한번 그것이 바로 그것과 거기에 파일의 이름을 딴 이후 충돌을 방지하는 데 도움이 있기 때문에 Boost 프로젝트 전체에서 대소 문자를 구분하는 파일 시스템에서 그 위치에있는 유일한 파일 일 수있다.

2

설치시 proj 디렉토리를 생성하면 경로에 proj이 있으면 괜찮습니다. 실제로 다른 포함 파일과 이름 충돌을 방지하는 좋은 방법입니다.

이름은 그러나 "PROJ '와 같은 일반적인 뭔가 안 그것은 프로젝트에 특정해야한다

관련 문제