VC2010 C ++-소스 파일 구성
VC 2010 C ++ 프로젝트에서 소스 파일을 구성하는 방법에 대해 몇 가지 질문이있었습니다. 포함 된 기본 필터는 궁극적으로 충분하지 않을 것입니다. .cpp 및 .hpp 파일이 많아서 지저분해질 것입니다. "source"라는 프로젝트의 루트에 폴더를 만든 다음 사용하려는 다양한 소스 파일 범주에 대해 "source"내에 폴더를 만들고 싶습니다. 솔루션을 마우스 오른쪽 버튼으로 클릭하면 폴더가 아닌 필터를 추가하는 옵션 만 표시됩니다. Windows 탐색기에서 수동으로 폴더를 만든 다음 포함 할 수 있지만 필터를 추가 할 수 없습니다. Windows 탐색기를 사용하지 않고 새 폴더를 추가하고 여전히 필터를 사용하는 방법이 있습니까?
또한 절대 경로없이 소스 파일 폴더를 포함하는 데 사용할 수있는 $ (CURDIR)과 유사한 것이 있습니까?
도움을 주셔서 미리 감사드립니다.
Visual Studio가 C ++ 파일과 작동하는 방식에 대해 약간 혼란 스럽지만 설명서가 형편 없기 때문에 괜찮습니다. 가장 먼저 할 일 : C # 또는 Java와 달리 프로젝트의 파일 배열은 디스크의 파일 배열과 관련이 없습니다. 파일과 폴더는 실제로 프로젝트 "내"가 아닙니다. 프로젝트에는 디스크에 이미 존재해야하는 파일 및 폴더의 이름과 경로 만 나열됩니다.
일반적으로 해당 폴더 안에 소스 파일이있는 폴더 레이아웃을 만듭니다. Visual Studio 외부 에서이 작업을 수행합니다 . 프로젝트 파일도 생성합니다. 프로젝트에 "파일을 추가"하면 디스크에서 파일을 찾을 위치를 프로젝트에 알리기 만하면됩니다.
구체적인 예를 들어보고 어떻게 구성할지 보여 드리겠습니다. SuperCalc 라는 그래프 계산기 프로그램을 만들고 있다고 가정합니다 . 소스 폴더가 있고 소스 내부에 다른 파일을 보관할 폴더를 만듭니다. 생성 한 폴더가 다음과 같다고 가정합니다.
SuperCalc\Source\Input
SuperCalc\Source\Math
SuperCalc\Source\Math\Matrix
SuperCalc\Source\Output
당신은 3 개 하위 디렉토리를 가지고 Source
: Input
, Output
,와 Math
. Math
하위 디렉토리라는 하위 디렉토리가 있습니다 Matrix
. 입력, 수학, 행렬 및 출력에 .cpp 파일이 있습니다. Windows 탐색기 또는 명령 프롬프트를 사용하여 이러한 디렉터리 (폴더)를 생성합니다.
이제 솔루션 파일 ( SuperCalc.sln
)과 프로젝트 파일 ( SuperCalc.vcxproj
& SuperCalc.vcxproj.filters
)도 만들 수 있습니다. Visual Studio 내에서 수행하십시오. 일반적으로 프로젝트 파일은 솔루션 디렉토리의 하위 폴더에 있습니다. 이 작업은 Visual Studio에서 자동으로 수행됩니다. 솔루션 파일의 위치를 선택하십시오. 소스 코드와 동일한 디렉토리 구조 (폴더 트리)에 있어야합니다. 소스 디렉토리 옆에 다음 위치에 두는 것이 좋습니다.
SuperCalc\Build
VS로 이동하여 File > New > Project > Visual Studio Solutions > Blank Solution File
. 솔루션에 이름 ( "SuperCalc")과 위치 (방금 SuperCalc\Build
디렉토리 에서 선택한 위치 )를 지정합니다. 솔루션 파일이 생성됩니다.
이제 솔루션 탐색기에서 솔루션 ( "Solution SuperCalc, 0 프로젝트")을 마우스 오른쪽 단추로 클릭하고 Add > New Project
. 이름을 선택하십시오. 이것은 "SuperCalc"와 같은 프로그램 실행 파일의 이름입니다! 선택 Win32에서 어느 Win32 콘솔 응용 프로그램 (이것은 DOS 콘솔 프로그램) 또는 Win32 프로젝트를 (이것은 일반적인 윈도우 GUI 프로그램입니다). 그런 다음 일반적으로 응용 프로그램 설정을 클릭하여 몇 가지 중요한 변경을 수행합니다. 한 가지는 내가 지시하지 않는 한 Visual Studio가 파일과 코드를 생성하는 것을 원하지 않기 때문에 빈 프로젝트를 선택합니다. 원하는 방식으로 모두 설정되면 FINISH를 클릭합니다.
이제 Visual Studio에서 만든 솔루션 파일과 프로젝트가 있습니다. 또한 소스 코드 또는 소스 코드가 생성 될 최소한의 디렉터리 구조 (폴더 트리)가 Visual Studio 외부에서 생성됩니다. 두 가지를 함께 연결할 때입니다.
원하는 경우 모든 소스 파일을 프로젝트의 소스 파일 필터에 나열 할 수 있습니다. 서로 다른 디렉토리 (Input, Matrix 등)에서 가져 오더라도 디스크의 파일 위치와 프로젝트에서의 모양 간에는 필수 관계가 없습니다. 그러나 파일이 많은 경우 "하위 필터"를 만들고 소스 파일 필터 내에서 필터링 한 다음 소스의 하위 폴더 이름을 지정하는 것이 더 쉽습니다. 이렇게하면 프로젝트 파일 내부의 디스크 디렉토리 구조를 복제합니다.
"SuperCalc"프로젝트의 소스 파일 필터를 마우스 오른쪽 버튼으로 클릭하고 추가> 새 필터 추가를 선택합니다. 이름을 지정하십시오 Input
(SuperCalc \ Source 디렉토리의 첫 번째). 또한 필터 Math
및 Output
. Math
필터를 마우스 오른쪽 버튼으로 클릭 하고 추가> 새 필터 추가를 선택하여 Matrix
(Math 내부) 라는 하위 필터를 만듭니다 . 이제 다음과 같은 필터가 있습니다 .
SuperCalc 소스 파일 입력 수학 매트릭스 산출
이전에 만든 디렉터리 (폴더)와 유사합니다. 이것은 순전히 인간에게 편리한 배열입니다 . Visual Studio는 그것에 대해 특별한 것을 이해하지 못합니다. VS에게 "파일을 추가"하라고 말하면 올바른 필터에 파일을 넣지 않습니다. 어디에 두어야할지 말해야합니다.
.cpp 파일을 추가하거나 작성하려면 .cpp 파일이있는 디렉토리에 해당하는 필터 이름을 선택하십시오. 따라서 파일을 추가하거나 생성 SuperCalc\Source\Math\Matrix\matrix_multiply.cpp
하려면 Matrix
솔루션 탐색기 에서 필터를 마우스 오른쪽 버튼으로 클릭 하고 추가> 새 파일 추가 또는 기존 파일 추가를 선택합니다. (기존 파일 추가는 이미 matrix_multiply.cpp를 작성하고 프로젝트에 위치를 지정하려는 경우를위한 것입니다.) 대화 상자를 사용하여 Source\Math\Matrix
디렉토리 로 이동하십시오 . 전체 프로그램의 모든 소스 파일에 대해이 프로세스를 반복합니다.
또한 "절대 경로없이 소스 파일 폴더를 포함하는 데 사용할 수있는 $ (CURDIR)와 유사한 것이 있습니까?"라는 질문이있었습니다. 운이 좋다 : Visual Studio 프로젝트는 절대 경로를 사용하지 않습니다! 상대 경로를 사용합니다. 프로젝트 파일은 .vcxproj 파일이 포함 된 디렉토리에서 소스 파일이 포함 된 디렉토리로 가져 오는 데 필요한 상대 경로를 저장합니다. 따라서 생성 SuperCalc.sln
하고 SuperCalc.vcxproj
내가 제안한 위치 ( SuperCalc\Build
디렉토리)를 사용하고 소스 하위 디렉토리에 .cpp 파일을 추가 한 경우 메모장을 사용하여 SuperCalc.vcxproj 파일 내부를 살펴보면 다음과 같은 줄이 표시됩니다.
<ClCompile Include = ".. \ .. \ .. \ Source \ Math \ Matrix \ matrix_multiply.cpp"/>
절대 경로가 없기 때문에 전체 SuperCalc 디렉토리 트리를 다른 위치로 이동할 수 있습니다. 그래도 모두 작동합니다. $ (CURDIR)과 같은 환경 변수 해킹이 필요하지 않습니다.
마지막으로 알아야 할 사항 : 소스 파일을 여러 디렉토리에 저장하기 때문에 #include
ing 헤더, .h 또는 .hpp 파일에 문제가있을 수 있습니다 . 컴파일러에게 헤더 파일이있는 디렉토리를 알려야합니다. 아마도 여러 디렉토리에 흩어져있을 것입니다. 따라서 프로젝트 설정을 편집합니다. 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 속성을 선택한 다음 구성 속성> C / C ++> 일반으로 드릴 다운합니다. 속성 시트의 첫 번째 필드는 "추가 포함 디렉터리"입니다. 다른 작업을 수행하기 전에 구성 드롭 다운 메뉴를 클릭하고 모든 구성을 선택합니다 . 32 비트 및 64 비트 빌드가 모두있는 경우 플랫폼 드롭 다운 메뉴를 클릭하고 모든 플랫폼을 선택합니다.. Now go to the "Additional Include Directories" and add all the paths to all the source directories, with the paths specified relative to the project file's directory. So for the SuperCalc example, it would look like:
..\..\..\Source\Input;..\..\..\Source\Math;..\..\..\Source\Math\Matrix;..\..\..\Source\Output
Once this change is made, a file like Source\Math\Matrix\matrix_multiply.cpp can have a line
#include "input_configuration.hpp"
to #include a file from the Input directory, and it will All Just Work.
(If it doesn't All Just Work, the usual approach is to go back into Project Properties and fiddle with the number of ..\
sequences in front of your Additional Include Directories. Remember that every time you go to make a change you must choose All Configurations again -- otherwise your changes will only apply to the current Configuration (Debug or Release). That setting is not sticky.)
It actually IS possible to view (and manipulate) the physical file structure via Visual Studio, as described in this SO post:
Header/Source file is not an requirement imposed by Visual Studio. That's just the default layout, and it's virtual, not physical. If you click "Show all files" in the solution explorer, it will show the folder tree as it is on the hard drive- which you can manipulate as you see fit.
I m late, but I advise against the accepted answer. The main reason if for code portability. Instead I recommend :
- To create the layout of folders and subfolders outside of visual studio (same as the accepted answer but the next points are different). Inside each subfolder create a
include
andsrc
folder - Then in Configuration Properties > C/C++ > General > "Additional Include Directories" (for All configuration and All Plateforms) add a single folder which is the base of all your subfolder.
To add you src files and includes files in these subfolders.
Finally include each header files using relatives paths to this base folder.
To be clear : if the layout of your project is as follow :
MyProjet
Math
include
random.h
functions.h
src
random.cpp
functions.cpp
Probability
include
normal.h
src
normal.cpp
you should have in functions.cpp
the following include statement :
#include"Math/include/functions.h"
if you also need to use the normal
code in functions.cpp, then the top of functions.cpp
should looks like this:
#include"Math/include/functions.h"
#include"Probability/include/normal.h"
In doing so, you'll be able to re-use your Math subfolder in another project (B) without pain: just by adding the MyProject
base folder into the "Additional Include Directories" of project B.
The key point is to have only one base folder into the "Additional Include Directories" property.
ps: the intellisense feature of VS 2015 helps a lot to write the #include...
Using a build system such as CMake or Premake could help when organizing files, and it has the added benefit of helping you port your code to other platforms. Here is a good presentation on the subject.
As it might be of help to someone, I should also add that having your source files separate from your project file (*.vcxproj
) makes it more difficult to create new files, as Visual Studio by default want to create new files in the same folder as your project. The workaround to this problem that I've found so far is to use the Visual Assists extension, as it allows adding new files relative to the directory or your currently open file. See this post for further explanation.
If you do want to create your solution and project in a different location than your source code, you can change your working directory:
Project > Properties > Configuration Properties > Debugging > Working Directory
참고URL : https://stackoverflow.com/questions/5321404/vc2010-c-organizing-source-files
'Program Tip' 카테고리의 다른 글
대화 상자 내에서 jQuery 대화 상자를 닫는 방법은 무엇입니까? (0) | 2020.11.16 |
---|---|
문자열이 double로 구문 분석 가능한지 확인하는 방법은 무엇입니까? (0) | 2020.11.16 |
Serializable을 사용하여 인 텐트를 통해 데이터 전달 (0) | 2020.11.16 |
3 열 레이아웃 HTML / CSS (0) | 2020.11.16 |
Git은 추적 된 파일의 일부에 대한 로컬 변경 사항을 무시합니다. (0) | 2020.11.16 |