Для добавления нового проекта на C++ необходимо соблюдать принятую структуру каталогов и соответствовать перечисленным требованиям:
*.sln
-файлы) должны лежать в папке VSProjects
.*.vcproj
-файлы) лежат в соответствующих подкаталогах (см. раздел Структура репозитория), поэтому, создавая проект из редактора Visual Studio, необходимо указывать путь к соответствующему каталогу и всегда делать пустой проект.newproject.vcproj
. Это надо делать из проводника Windows. После копирования остается исключить из проекта все файлы ручным редактированием текстового файла newproject.vcproj
. Также в этом же файле надо заменить название проекта в 2 местах, так как, если сделать это из Visual Studio, замена будет сделана только в одном месте.$(SolutionDir)/../_$(ConfigurationName)/bin
,$(SolutionDir)/../_$(ConfigurationName)/obj/$(ProjectName)
;$(SolutionDir)/../_$(ConfigurationName)/bin64
,$(SolutionDir)/../_$(ConfigurationName)/obj64/$(ProjectName)
;Multi-threaded
— для Release-конфигурации),Multi-threaded Debug
— для Debug-конфигурации;shell.dll
), необходимо настроить еще 2 конфигурации: ReleaseDll и DebugDll, для которых в настройках генерации кода (<Контекстное меню проекта> → Properties → Configuration Properties → C/C++ → Code Generation):VSProjects
. Использовать средства Visual Studio для создания классов (Add Class) нельзя, потому что исходники при этом образуются в папке с проектом. Имена классов должны соответствовать именам файлов с кодом. Внутри одного файла допускается помещать только один класс и все структуры, используемые им. Структуры желательно тоже выносить в отдельные файлы, если они используются за пределами класса. Заголовочные файлы класса обрамлять вместо #pragma once
конструкцией #ifndef <Макрос с названием заголовочного файла>
#define <Макрос с …>
… #endif
: #ifndef FileNameH #define FileNameH #include "BaseFileName.h" #include "../../AdditionalUserInclude.h" #include <stdInclude> using std::stdIncludeMember; namespace Namespace { class FileName { // Attribute comment type _privateAttribute; /** Method comment */ type PrivateMethod(type argument); protected: // Attribute comment type _protectedAttribute; /** Method comment */ type ProtectedMethod(type argument); public: /** Constructor comment */ FileName(type argument) // Attribute comment type PublicAttribute; /** Method comment */ type PublicMethod(type argument); }; } ... #endif
Здесь FileName
— имя заголовочного файла.
Все #include
писать с учетом регистра (необходимо для *nix-версии) и с разделителем в стиле *nix (/
, а не \
), например:
#include "../wrappers/FileRoutines.h"