我有一个用于生产代码和测试代码的静态库。我希望只有在构建测试.exe时才能注入测试数据。我想使用预处理器#defines,而不是MSVS配置(例如,Debug vs. Release),因为我正在测试性能。 Debug构建关闭了优化,这在调试期间非常好,但在我想测试性能时却不那么好。
举个例子,假设我在MSVS中有Foo.lib,Production.exe和Test.exe项目。 Production.exe和Test.exe都链接Foo.lib。我希望Production.exe和Test.exe使用各自的预处理器定义重建Foo.lib,因此Foo.lib中的代码将根据它所针对的可执行文件进行有条件的编译。
我对其他解决方案持开放态度,我希望我能清楚地说出我的问题。关于堆栈溢出的第一篇文章。
答案 0 :(得分:3)
您需要设置多个解决方案配置以支持您想要的每个方案。首先,我们将向静态库添加一个新的 Test 配置,并创建一个附带的 Test 解决方案配置:
现在,您可以使用所需的#defines修改静态库的新 Test 配置:
...现在,您希望设置构建,以便您具有使用静态库的 Test 配置构建Test.exe的构建配置,以及具有库<的Release.exe em>发布配置。返回配置管理器(正如我们在上面的前两个步骤中所做的那样):
设置Release.exe的构建配置:
设置Test.exe的构建配置:
现在,当您将解决方案更改为 Test 或 Release 配置时,我希望您拥有所需的构建行为。
答案 1 :(得分:3)
这听起来非常错误,测试数据不属于.lib。并且以与在目标机器上使用的方式不同的方式构建的测试代码不是真正的测试。 VS让你在这里摆脱困境,这是不可能的。您有使用其他配置来更改.lib的构建方式。
让测试应用程序将测试数据提供给.lib。正如真实应用程序在部署后为其提供实际数据一样。