2011-09-18 3 views
0

나는 모든 클래스가 기능을 나타내는 데 도움이되는 패키지로 구성되는 Java/AS3/Javascript 백그라운드에서 왔습니다.파일 시스템의 C++ 조직

C++ 프로젝트를 시작하면서 필자는이 파일 시스템 구조를 거의 같은 방식으로 모방하려고했지만 include와 함께 문제를 겪어 왔습니다.

현재 내부에 main.cpp 파일이있는 src 디렉토리가 있습니다. 그런 다음 루트 디렉토리가 있고 내부에 다른 파일이 있습니다. 다음은 예입니다 :

SRC

-> MAIN.CPP

-> 창

----> Window.h

----> Window.cpp

main.cpp에는 #include "Window.h"문과 함께 Window.h가 포함되어 있으며 모든 것이 잘됩니다. 하지만 Visual Studio를 다시 시작하면 "Window.h"를 찾을 수 없다는 불만이 있습니다.

오픈 소스 프로젝트를 살펴본 결과, 하나의 디렉토리에 모든 소스 파일이 포함되어있어 쉽게 포함 할 수있는 중첩이없는 것을 보았습니다. 일부에는 헤더와 cpp 파일이 분리되어 있습니다.

파일 시스템에 large-ish C++ 프로젝트를 구성하는 올바른 방법은 무엇입니까 (최소한 두통을 덜게 할 수 있습니까?).

감사합니다.

+0

귀하의 목표는 합리적입니다. 프로젝트의 포함 경로를 올바르게 설정하면됩니다. 하나의 프로젝트에 여러 개의 폴더가 포함되어 있다면'#include Window \ window.h' – Chad

+1

"Window.h"! = 을 수행 할 수 있어야합니다. 따옴표는 그가 윈도우 헤더 파일이 아니라 'Window'라는 프로젝트 헤더 파일을 가지고 있음을 의미합니다. –

+0

죄송합니다. 아마도 덜 혼란스런 예를 사용했을 수 있습니다. Window.h 및 Window.cpp는 Window 기능을 래핑하도록 만든 사용자 지정 클래스입니다. Window.h에는 MS Windows 코드에 액세스하기위한 이 포함되어 있습니다. – Jon

답변

1

당신이하려고 한 것처럼 그것을 깨는 것은 성취하기에 충분하고 쉽습니다.

프로젝트의 포함 경로 만 설정하면됩니다. Visual Studio에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 "속성"을 클릭하십시오. 거기에서 왼쪽의 트리 컨트롤에서 "C/C++"를 확장 한 다음 트리에서 "일반"을 선택하십시오. 오른쪽에있는 첫 번째 옵션은 "Additional Include Directories"입니다.

당신은 특정 지정할 수 있습니다

이 (세미콜론으로 구분) 디렉토리를 포함 :

이 당신은 몇 가지 옵션이 있습니다. 이 폴더가 있다면 예를 들어, "창"과 "인쇄"당신은 넣어 수 : 이런 쉽게 창 및 인쇄에서 파일을 포함 할 수 있도록 할

..\Window;..\Printing

:

#include <Window.h>  // from src/window 
#include <Printing.h> // from src/printing 

위의 접근법에는 사용하는 다른 라이브러리의 이름과 쉽게 충돌 할 수 있으므로 포함 순서가 매우 중요하므로 몇 가지 단점이 있습니다.

(내 생각에) 더 좋은 방법은 인클루드 경로로 다음을 추가하는 것입니다 포함를 찾을 때

..\

이는 부모 디렉토리를 검색 할 것입니다. 이렇게하면 포함 경로에서 다음과 같이 더 자세한 정보를 얻을 수 있습니다.

#include <Window/Window.h>  // it's more clear where these are coming from 
#include <Printing/Printing.h> // and much less likely to collide with other library 
           // header files 
+0

고마워요! 이것은 도움이되었고 파일을 찾지 못하는 문제를 해결했습니다. – Jon

+0

문제 없습니다. 이 값을 변경하면 기본적으로 현재 활성 플랫폼 (x64, x64 등) 및 구성 (디버그, 릴리스 등)에 대해서만 변경됩니다. 이 옵션을 변경할 때 여러 구성/플랫폼 등을 지정할 수 있습니다. – Chad

0

Java 예제를 따르고 C++ 네임 스페이스로 소스 파일을 정렬하는 것이 좋습니다. /src 디렉터리 아래에 네임 스페이스에 해당하는 하위 폴더를 만듭니다.