Несколько типов выходных данных проекта: компиляция в виде EXE и LIB
У меня есть проект C++, который создается как EXE. Однако мне также нужно собрать проект в виде статической библиотеки (файл.LIB). Прямо сейчас, чтобы получить полную сборку, мне нужно собрать ее в одном формате, затем открыть свойства проекта и в разделе "Основные"> "Параметры проекта по умолчанию"> "Тип конфигурации" выбрать другой формат, принять и перекомпилировать. Это настоящая проблема. Есть ли способ указать оба типа? Я не видел ничего на MSDN по этому поводу.
Я использую Visual Studio 2012.
2 ответа
Распространенный (и особенно вменяемый) способ решения вашей проблемы - это решение, содержащее два проекта. Первый проект должен быть библиотекой (статически или динамически связанной, это не имеет значения), которая содержит большую часть вашего кода. Второй проект должен быть исполняемым файлом, который ссылается на библиотеку, которую вы создали в своем первом проекте.
Сделайте это так, и одна сборка вашего решения создаст как исполняемый файл, так и библиотеку.
Создайте два проекта, добавьте один и тот же набор исходных файлов в оба.
Это довольно старый поток, но для потомков: если в вашем проекте есть минималистичный main.cpp, вы можете создать библиотеку из всего.obj, сгенерированного сборкой, за исключением main.obj. Типичный способ - добавить эту сборку в событие перед связыванием:
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
[...]
<PreLinkEvent>
<Command>@ECHO ON
"lib.exe" /NOLOGO /OUT:"$(OutDir)$(ProjectName).lib" "$(IntermediateOutputPath)*.obj"
"lib.exe" /NOLOGO "$(OutDir)$(ProjectName).lib" /REMOVE:"$(IntermediateOutputPath)main.obj"</Command>
</PreLinkEvent>
</ItemDefinitionGroup>
Он работал с Visual Studio 2010 - я не тестировал его с более новой версией, но тоже должен работать, возможно, с настройкой флагов команд.