0

如果这在其他地方有所涉及,我深表歉意,但我无法轻易找到信息。我正在为我的公司使用一个现存的库,它使用预处理器指令来添加和删除专门的功能。例如,我们可能有一个 IMPORT_OPENBLAS 和 IMPORT_SPEEX 来指示构建需要支持使用 OpenBLAS 和 Speex 库。我们还有基于 Google 测试框架的单元测试,其中一些需要启用上述预处理器指令才能运行,这些指令静态链接到我们的库中。我们通常运行单元测试的两个地方是通过 Visual Studio(2008 如果有区别的话)和通过调用 vsbuild.exe 进行构建的 Ant。

因此,长话短说,我的任务是添加额外的功能,例如上述库。我们还有其他项目使用我们的库,并且特别不希望启用这些功能,部分原因是依赖关系问题,部分原因是他们不希望增加复杂性。我的第一个冲动是将预处理器指令放入单元测试项目中,因为无论如何它将我们的库构建为依赖项,但这似乎不起作用。有没有办法标记事物以指示需要打开给定的预处理器命令以编译依赖项目?

另一种选择是为单元测试创​​建新的构建目标,专门设置正确的预处理器标志,但我想尽可能避免这种情况,因为我们已经有 10 个不同的构建目标,包含不同的链接方法、处理器大小以及调试与发布模式和我早期的一项任务涉及让它们全部重新工作,因为几个月来没有人编译其中的一些,因为我们的主要版本仅基于其中两个目标。

感谢您提供任何帮助。

4

1 回答 1

0

您可以简单地拥有一个包含这些定义的头文件,并通过项目属性将其包含在项目中的所有文件中。查看项目属性 -> 配置属性 -> C/C++ -> 高级 -> 强制包含。

换句话说,该文件将包含在所有项目中。

于 2013-08-21T15:03:54.357 回答