Как добавлять проект на С++ (VS 2008)?

Для добавления нового проекта на C++ необходимо соблюдать принятую структуру каталогов и соответствовать перечисленным требованиям:

  1. Все файлы solution (*.sln-файлы) должны лежать в папке VSProjects.
  2. Все файлы проектов (*.vcproj-файлы) лежат в соответствующих подкаталогах (см. раздел Структура репозитория), поэтому, создавая проект из редактора Visual Studio, необходимо указывать путь к соответствующему каталогу и всегда делать пустой проект.
  3. Всего есть 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).
  4. После создания проекта добавлять файлы с исходниками надо в соответствующие папки на одном уровне с папкой VSProjects. Использовать средства Visual Studio для создания классов (Add Class) нельзя, потому что исходники при этом образуются в папке с проектом. Имена классов должны соответствовать именам файлов с кодом. Внутри одного файла допускается помещать только один класс и все структуры, используемые им. Структуры желательно тоже выносить в отдельные файлы, если они используются за пределами класса. Заголовочные файлы класса обрамлять вместо #pragma once конструкцией #ifndef <Макрос с названием заголовочного файла> #define <Макрос с …>#endif:
    FileName.h
    #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"
  5. Все добавляемые файлы на C++ конвертировать в кодировку UTF8 (например, с помощью программ AkelPad или iconv) перед commit-ом на репозиторий.
  6. Если сборка проекта требует других библиотек, указать их в Project Dependencies (<Контекстное меню solution> → Properties → Common Properties).
  7. В Configuration Manager (<Контекстное меню solution> → Properties → Configuration → Configuration Properties) для solution проверить для всех конфигураций, что проект отмечен как Build и проверить соответствие конфигурации проекта и конфигурации для solution (при необходимости скорректировать). После этого проверить собираемость solution.