1

我有一个用于生产代码和测试代码的静态库。我希望只有在构建测试.exe时才能够注入测试数据。我想使用预处理器#defines而不是MSVS配置(例如,Debug vs. Release)来执行此操作,因为我正在测试性能。调试版本会关闭优化,这在调试过程中很好,但当我想要测试性能时不是那么好。Visual Studio 2010 - 试图有条件地编译基于目标.exe的静态库

举个例子,假设我有MSVS中的Foo.lib,Production.exe和Test.exe项目。 Production.exe和Test.exe都链接Foo.lib。我希望Production.exe和Test.exe用它们各自的预处理器定义重建Foo.lib,所以Foo.lib中的代码将根据它的目标可执行文件进行有条件编译。

我愿意接受其他解决方案,我希望我能清楚地说明我的问题。首先发布堆栈溢出。

回答

3

您需要设置多个解决方案配置来支持您所需的每种场景。首先,我们将一个新的测试配置添加到静态库,并创建一个伴随测试解决方案配置:在Visual Studio

  • Solution Explorer中,右键单击顶级解决方案节点上。
  • 点击配置管理器...
  • 在项目列表中找到您的C/C++静态库项目。单击该项目的配置单元格。它会变成一个下拉菜单。选择新..从下拉菜单中选择。
    • 输入新项目配置的名称。随心所欲地称呼它。在这些步骤中,我将其称为测试
    • 对于复制设置:字段,请选择版本,因为您希望启用优化的测试配置。
    • 离开创建新的解决方案配置复选框被选中。
    • 点击OK

现在你可以用你想要的#define语句修改您的静态库的新测试配置:

  • 找到你的C/C++项目解决方案资源管理器。上单击鼠标右键,选择属性...
  • 选择新测试从右上角的配置下拉配置。
  • 在左侧窗格中,选择配置属性| C/C++ |预处理
  • 在右侧,添加所需的#define到预处理定义的列表中

......现在,你要设置你的积聚,使你有建立一个测试构建配置.exe与静态库的测试配置,以及Release.exe与库的版本配置。回到配置管理器(如我们做了前两步以上):

  1. 设置你的构建配置Release.exe:

    • 在左上角的下拉选择发布活动解决方案配置
    • 为了您Release.exe项目,选择它的发布配置和MA ke sure Build checked
    • 对于您的Test.exe项目,请确保Build未选中。
    • 对于静态库,选择其发布配置,并确保构建检查
  2. 设置你的构建配置将Test.exe:

    • 在顶左下拉,选择测试作为有效的解决方案配置
    • 对于您的Release.exe项目,请确保Build未选中。
    • 为了您将Test.exe项目,选择它的发行配置(我认为这就是你想要的),并确保构建检查
    • 对于静态库,选择其测试配置,使确保构建检查

现在,当你改变你的解决方案,测试版本配置,我希望你有每个你想要的构建行为。

+0

谢谢,安德鲁。你的回答回答我的问题。我仍然会看看汉斯发布的看似更好的解决方案。 – Bill 2011-03-17 18:35:27

3

这听起来很错误,测试数据不属于.lib。测试以另一种方式构建的代码不是目标机器上使用的代码,这不是真正的测试。 VS让你摆脱麻烦,这是不可能的。你使用另一种配置来改变.lib的构建方式。

让测试应用程序将测试数据提供给.lib。就像真正的应用程序在部署它之后提供真实数据一样。

+0

感谢您的回应。这个特殊的应用是使用麦克风作为数据输入。我会研究麦克风数据采集的问题。 – Bill 2011-03-17 18:29:46

+1

啊,当我读到“静态库...用于测试代码”时,我想“释放静态库的构建,但在静态库源中启用了断言”。这种设置过去相对普遍。 Hans关于原始问题的反馈前提非常好。 – 2011-03-17 18:43:51

相关问题