我有一个作为 EXE 构建的 C++ 项目。但是,我还需要将项目构建为静态库(.LIB 文件)。现在为了获得完整的构建,我需要以一种格式构建它,然后打开项目属性并在 General > Project Defaults > Configuration Type 下选择另一种格式,接受并重新编译。这是一个真正的麻烦。有什么方法可以指定这两种类型吗?我在 MSDN 上没有看到任何关于此的内容。
我正在使用 Visual Studio 2012。
我有一个作为 EXE 构建的 C++ 项目。但是,我还需要将项目构建为静态库(.LIB 文件)。现在为了获得完整的构建,我需要以一种格式构建它,然后打开项目属性并在 General > Project Defaults > Configuration Type 下选择另一种格式,接受并重新编译。这是一个真正的麻烦。有什么方法可以指定这两种类型吗?我在 MSDN 上没有看到任何关于此的内容。
我正在使用 Visual Studio 2012。
解决问题的一种常见(尤其是理智)方法是拥有一个包含两个项目的解决方案。第一个项目应该是一个包含大部分代码的库(静态或动态链接,没关系)。第二个项目应该是一个可执行文件,它引用您在第一个项目中创建的库。
这样做,您的解决方案的单个构建将生成可执行文件和库。
创建两个项目,将同一组源文件添加到两者。
这是一个非常古老的线程,但对于后代:如果您的项目有一个极简的 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 和 2019 一起工作(未使用中间版本进行测试)。