多项目配置C++
Multiple Project Configurations C++
我使用Visual Studio 2017(但适用于2010+之后的任何版本),我一直在努力想出一种方法来组织我的调试/发布库,以避免在混合不同版本的运行库时出现所有这些链接错误。从概念上讲,我的目标似乎很简单,但我还没有找到实现我想要的一切的方法。
以下是我所拥有的,以及我想做的:
公共库:
ComLib1
CompLib2
。。。
Exe1:
ComLib1
CompLib2
Exe1Lib1
Exe1Lib2
Exe1
Exe2:
ComLib1
CompLib2
Exe2Lib1
Exe2Lib2
Exe2
So 2个不同的可执行文件,使用一组公共库和Exe特定库。
我想创建4种不同的构建配置。
Cfg1:
这将包含所有库(包括公共库)的调试信息/未优化代码。
Cfg2:
这将包含所有Exe特定库的调试信息/未优化代码,但不包括公共库。
Cfg3:
这将包含一些库的调试信息/未优化的代码库,以及其余库的未调试信息/优化的库的组合。
Cfg4:
你猜对了。这将包含非调试信息和所有优化的代码。
我的第一次尝试是基本上为每个库创建2组二进制文件;一个在调试模式下编译(带有/MTd/Od),另一个在发布模式下编译,带有(/MT/O2)。然后在我的各种配置中选择一个或另一个版本。这对Cfg1&Cfg4(因为所有运行库自始至终都是一致的),但在Cfg2&参考3.
我理解我为什么会犯这些错误。我只是不确定如何解决这些问题,我认为这是一种常见的情况。也许Cfg3并不常见,但我认为Cfg1,2&4个是。
感谢您的投入。
EDIT
我真的不认为我需要添加这些信息,因为我想简短地回答我的问题(呃)。但如果它能帮助我澄清我的目标,我会把它加起来。
这是一个实时模拟器。我只是不能在典型的调试配置中运行每个库,因为我无法维护实时性。我很少需要调试公共库,因为它们大多与服务器/IO任务有关。Exe-lib主要包含数学/热力学,是我花时间最多的地方。然而,1 Exe lib包含反应堆中子学,涉及大量计算。我们通常将其视为一个黑盒(供应商提供的神秘代码),我几乎总是想使用优化代码(典型的发布设置)来运行它。
如果没有一些特殊考虑,您就不能在同一进程中使用不同的运行时库(例如,在接口中没有CRT对象的情况下使用DLL左右,使它们完全分离),而不会出现链接错误或在CRT对象之间传递时冒运行时问题的风险。
您可以在一个模块中混合大多数通用优化选项,但值得注意的例外是,所有对象的链接时间代码生成必须相同。只要您自己的代码没有得到优化,发行版运行库通常也可用于调试。
为了方便地切换,您需要为您想要的每种情况提供一个解决方案配置(因此为4)。如果您不希望一个项目配置被多个解决方案配置使用,但它必须遵循前面提到的限制,并且可能会混淆输出目录等内容,那么您可以将一个项目的配置由多个方案配置使用。还可以使用特性表在多个项目和配置之间共享设置。
我使用预定义的宏为输出目录路径或目标文件名执行了类似的操作
例如,我使用扩展为Win32_Debug
或Win32_Release
的$(Platform)_$(Configuration)
。
您也可以使用环境变量。我还没有尝试使用预处理器宏。
在互联网上搜索"MSDN Visual Studio预定义宏$(平台)"。
所以这就是我最终得到想要的东西的原因。
假设我使用的是静态运行库,我想我会为我的公共库保留典型的Debug/Release(分别为/MTd和/MT)库,并为我的Exe创建3组库:
Exe1Lib1Rlease:典型发布配置
Exe1Lib1Debug:典型调试配置
Exe1Lib1DebugMT:带有调试信息的非优化代码,但使用MT运行库
Cfg1:
将在周围使用典型的调试库
Cfg2&Cfg3:
将为公共库使用典型的Release库,并为Exe的库使用Exe1Lib1DebugMT
Cfg4:
将全面使用典型的Release库。
EDIT
实际上,Cfg2&Cfg3设置更准确地表示为:
Cfg2:
将为公共库使用典型的Release库,并为Exe的库使用Exe1Lib1DebugMT
Cfg3:
将使用常见库的典型Release库,以及Exe库的Release和Exe1Lib1DebugMT的组合
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 无法找到/读取配置文件.conf-FileIOException
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 一种在C++中读取TXT配置文件的简单方法
- 生成MRPT库时cmake配置失败
- FFMPEG配置文件级别id大小无效
- 如何通过Conan和CMake找到用于pkg配置的.pc文件
- 配置文件解析器仅返回以前的值
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 是否可以配置提升日志刷新?
- 如何配置Visual Studio Code以使用cygwin,cmake和gcc进行调试
- C/C++:打印(配置)头文件的内容
- 配置:错误:找不到 MySQL 包含目录
- 安装 psutil 和为 pypy 配置期间出错
- 叮当格式化程序多行格式配置错误
- 使用 Eclipse CDT 进行 Cplex 配置
- 为c++配置Visual studio代码
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- 如何在窗户上使用和配置叮当声?