======Как добавлять проект на С++ (VS 2008)?====== Для добавления нового проекта на //C++// необходимо соблюдать принятую структуру каталогов и соответствовать перечисленным требованиям: - Все файлы //solution// (''*.sln''-файлы) должны лежать в папке ''VSProjects''. - Все файлы проектов (''*.vcproj''-файлы) лежат в соответствующих подкаталогах (см. раздел [[developing_branch_description|Структура репозитория]]), поэтому, создавая проект из редактора //Visual Studio//, необходимо указывать путь к соответствующему каталогу и всегда делать пустой проект. - Всего есть 3 типа проектов: //exe//, //dll// и //lib//. Для них уже есть готовые проекты, поэтому наиболее правильный и простой путь создания нового проекта --- копирование существующего проекта соответствующего типа под новым именем ''newproject.vcproj''. Это надо делать из проводника //Windows//. После копирования остается исключить из проекта все файлы ручным редактированием текстового файла ''newproject.vcproj''. Также в этом же файле надо заменить название проекта в 2 местах, так как, если сделать это из //Visual Studio//, замена будет сделана только в одном месте.\\ В случае, если все-таки проект делается вручную, необходимо произвести ряд вспомогательных действий: * В настройках надо прописать пути вывода (__ -> Properties -> Configuration Properties -> General__): * //Output Directory//: ''$(SolutionDir)/../_$(ConfigurationName)/bin'', * //Intermediate Directory//: ''$(SolutionDir)/../_$(ConfigurationName)/obj/$(ProjectName)''; * Создать конфигурацию для //x64// и в ней тоже прописать: * //Output Directory//: ''$(SolutionDir)/../_$(ConfigurationName)/bin64'', * //Intermediate Directory//: ''$(SolutionDir)/../_$(ConfigurationName)/obj64/$(ProjectName)''; * В настройках генерации кода (__ -> Properties -> Configuration Properties -> C/C++ -> Code Generation__): * //Runtime Library//: * ''Multi-threaded'' --- для //Release//-конфигурации), * ''Multi-threaded Debug'' --- для //Debug//-конфигурации; * Если библиотека статическая и используется в смешанной сборке (''shell.dll''), необходимо настроить еще 2 конфигурации: //ReleaseDll// и //DebugDll//, для которых в настройках генерации кода (__ -> Properties -> Configuration Properties -> C/C++ -> Code Generation__): * //Runtime Library//: * //Multi-threaded DLL// --- для //Release//-конфигурации), * //Multi-threaded Debug DLL// --- для //Debug//-конфигурации; * **Внимание!** Ни в коем случае нельзя делать проекты на основе других типов средствами //Visual Studio// (например, нельзя создавать проект типа //lib//, а потом менять его на //dll//). - После создания проекта добавлять файлы с исходниками надо в соответствующие папки на одном уровне с папкой ''VSProjects''. Использовать средства //Visual Studio// для создания классов (//Add Class//) нельзя, потому что исходники при этом образуются в папке с проектом. Имена классов должны соответствовать именам файлов с кодом. Внутри одного файла допускается помещать только один класс и все структуры, используемые им. Структуры желательно тоже выносить в отдельные файлы, если они используются за пределами класса. Заголовочные файлы класса обрамлять вместо ''#pragma once'' конструкцией ''#ifndef '' ''#define '' ... ''#endif'': #ifndef FileNameH #define FileNameH #include "BaseFileName.h" #include "../../AdditionalUserInclude.h" #include 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" - Все добавляемые файлы на //C++// конвертировать в кодировку //UTF8// (например, с помощью программ //AkelPad// или //iconv//) перед //commit//-ом на репозиторий. - Если сборка проекта требует других библиотек, указать их в //Project Dependencies// (__ -> Properties -> Common Properties__). - В //Configuration Manager// (__ -> Properties -> Configuration -> Configuration Properties__) для //solution// проверить для всех конфигураций, что проект отмечен как //Build// и проверить соответствие конфигурации проекта и конфигурации для //solution// (при необходимости скорректировать). После этого проверить собираемость //solution//.