2011-02-15 4 views
15

내 프로젝트에서 필자는 현재 상대 경로를 사용하여 내 파일을 포함시킵니다. 자주 변경되지 않습니다. 그러나, 보통 폴더에 많은 파일을 포함시키기 때문에 꽤 이상한 패턴을 생성합니다.내 프로젝트에 상대 경로를 사용해야합니까, 아니면 포함 경로에 include-directory를 두어야합니까?

예를 들어, 현재 프로젝트에서 나는 network/server/myfile.hpp입니다. common/log.hpp을 포함해야합니다. 현재 내가 사용하는 #include "../../common/log.hpp"은 매우 장황하지만 작동합니다.

대신 경로에 내 기본 포함 디렉토리를 추가하면 간단하게 "common/log.hpp"을 포함 할 수 있습니다.

이 질문은 다른 무엇보다 우선적 인 내용 일 수 있지만 교차 플랫폼 응용 프로그램과 관련하여 객관적 장단점이 있으며 C++ 규칙은 무엇입니까?

답변

12

상대 경로가 ..인데 약간보기가 불규칙하고 특정 파일 시스템 구조가 예상됩니다. 즉, "../../common/log.hpp"은 두 개의 폴더입니다. 불필요한 의존성을 피하고 일반적으로 파일 시스템 구조를 피하는 것이 좋습니다. 따라서 한 디렉토리에서 다른 디렉토리로 헤더 파일을 이동해도 해당 헤더를 포함하는 모든 소스 파일을 강제로 업데이트하지 않아도됩니다.

포함 항목을 네임 스페이스 및 클래스에 맞게 설정하는 것도 좋습니다. 경우, 예를 들어, 당신은 :

namespace foo { namespace bar { struct Baz; } } 

이 포함 편리하고 직관적가 좋아 :

#include "foo/bar/Baz.h" 
1

저는 항상 내 프로젝트를 위치와 독립적으로 만들기 위해 노력하고 있습니다. 새 컴퓨터/플랫폼에서 작업하는 경우 최소한의 설치만으로 컴파일하고 계속 작업 할 수 있기를 원합니다. 당신이 주관적인 질문을하고있을 때, 필자의 주관적 대답은 필자가 상대 경로를 사용하는 것을 선호한다는 것입니다.

0

아무런 규정이 없으므로 원하는대로 편도 할 수 있습니다. 당신은 그때 분명히 2 옵션에 갈 생각 정돈을 유지하려면

내 말은, 내 자신이 원인 두 번째 하나 갈 것이 아니 당신이 이동 돌 맹에있을거야하지만, 몇 파일, main이라고 말하면됩니다.

그리고는 또한 상대 경로는 당신에게 포트를 사용하면 응용 프로그램에 대한 자유를 제공, 그래서 당신은 (컴파일러 옵션) 소스 파일에서 #include <common/log.hpp>을 갖는 프로젝트 설정에서 common/log.hpp의 경로를 가짐으로써 그것을 :)

5

common/log.hpp이 다른 곳으로 이동하면 소스 코드를 변경하지 않아도되므로이 방법을 권장합니다. 이 경우 꺾쇠 괄호를 사용하여 참고 - 컴파일러는 /I 컴파일러 옵션에 의해 지정된 경로에서 헤더의 헤더를 검색해야합니다.

0

나는 각각의 구성 요소는 하나 이상의 디렉토리를 사용할 수 없습니다 규칙을 가지고 있고, 그 구성 요소에는 포함 경로에 종속 구성 요소의 디렉토리가 있습니다.

따라서, 각 구성 요소는 자신이 포함 좋게 마지막 배포 버전이 시스템에 설치되어있는 헤더를 사용하여 하나 개의 구성 요소와 불쾌한 놀라움을 피할 수있는 <>을 사용 '을 "" 구문을 사용하여 파일 및 기타 구성 요소를 포함하기보다는 디렉토리를 포함합니다 소스 트리의 하나. 또한 초기 프로젝트를 구성 요소 화하도록 강요하는 효과가 있습니다.