Есть ли простой способ настроить шов ссылок с помощью системы сборки Visual Studio 2010? - PullRequest
0 голосов
/ 14 января 2011

Раньше у меня была статическая библиотека, которую импортировали моя основная программа и мои тесты. Однако мне нужно было создать глобальные переменные внутри моей статической библиотеки, и нет никакого способа заставить Visual Studio сделать это.

Тогда я хотел бы иметь проект, который компилирует все общие файлы C ++, проект, который компилирует и связывает модульные тесты (с общими файлами C ++), и проект, который связывает реальное приложение.

Как я могу сделать это в Visual Studio 2010?

РЕДАКТИРОВАТЬ: Поскольку уточнение попросили, вот что я имею в виду:

InterfaceIUse.hpp

#include <memory>

struct IInterface
{
    virtual ~IInterface() {}
    virtual void SomethingIDependOn() = 0;
};

std::auto_ptr<IInterface> FactoryMethod();

CodeUnderTest.cpp

#include "InterfaceIUse.hpp"

void FunctionUnderTest()
{
    //Blah blah blah
}

IExistOnlyInTheMainProgram.cpp

#include "InterfaceIUse.hpp"

std::auto_ptr<IInterface> FactoryMethod()
{
    //I return the real implementation of the interface.
}

IExistOnlyInTheTest.cpp

#include "InterfaceIUse.hpp"

std::auto_ptr<IInterface> FactoryMethod()
{
    //I return the mock implementation of the interface.
}

Идея состоит в том, чтобы скомпилировать правильную реализацию .cpp данной фабрики, которая позволит проверять зависимости кода для внедрения зависимостей.

Создание такого вида ссылочного шва легко с make-файлами, но make-файлы нежелательны, потому что я вынужден вручную поддерживать зависимости заголовка в make-файле.

1 Ответ

1 голос
/ 17 января 2011

Я выполнил аналогичную настройку в VS2008, которая, по-моему, применима и для вас в VS2010.

Для начала я настроил иерархию своего проекта как Build , ProductionCodeBase и TestCodeBase .Общий интерфейс / заголовки извлекаются в папку, доступную для всех проектов.

Затем в моем проекте "Сборка" я вручную добавляю объектные файлы из ProductionCodeBase в " Release"конфигурация и объектные файлы из TestCodeBase в конфигурацию" Debug".

Не забудьте установить зависимости проекта, чтобы объектный файл действовал при связывании в " Build ".

Обратите внимание, что вы можете создать проект, который компилирует только исходный кодкод в объектные файлы без попытки связать их.Просто зайдите в «Порядок сборки инструмента» для этого конкретного проекта и отключите соответствующий компоновщик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...