我有一个使用许多静态库的大型应用,它独立于平台并部署在 Windows 和 Linux 下。
所有静态库和 main() 本身都使用两个定义编译:
-DVERSION=1.0.0 -DBUILD_DATE=00.00.0000
每个静态库和主库中的宏使用这些定义将当前库版本存储在类似注册表的类中。
在 GCC/Linux 下这工作得很好 - 你可以列出所有链接的模块并显示它们的真实版本和构建日期,例如:
- ImageReader 0.5.4 (12.01.2010)
- 压缩 1.0.1 (03.01.2010)
- SQLReader 0.3.3 (22.12.2009)
但是:当我将完全相同的代码与 VisualStudio 2005 SP1 链接时,我只得到最后编译模块的版本和构建日期:
- ImageReader 0.5.4 (12.01.2010)
- 压缩 0.5.4 (12.01.2010)
- SQLReader 0.5.4 (12.01.2010)
有人有想法吗?这是 VC++ 链接器的“优化”问题吗?
最佳答案
嗯,Visual Studio 支持具有多个项目的解决方案。并且其依赖引擎能够检测到更改的宏值需要重新编译项目。奥卡姆 Razor 说,库只是被重建并获得了新的 VERSION 宏值。
关于c++ - VC++ 替换不同对象的定义,GCC 等不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2056308/