======Как добавлять проект на С++ (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// (__/Контекстное меню solution//> -> Properties -> Common Properties__).
- В //Configuration Manager// (__/Контекстное меню solution//> -> Properties -> Configuration -> Configuration Properties__) для //solution// проверить для всех конфигураций, что проект отмечен как //Build// и проверить соответствие конфигурации проекта и конфигурации для //solution// (при необходимости скорректировать). После этого проверить собираемость //solution//.