c++ - VC++ 替换不同对象的定义,GCC 等不

标签 c++ c windows visual-c++ c-preprocessor

我有一个使用许多静态库的大型应用,它独立于平台并部署在 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/

相关文章:

c++ - g++/gcc 如何确定要链接的库有多个版本可供选择?

c++ - 传递给调整大小函数后使用 new 创建的动态数组出错

c++ - C/C++ 图像加载

windows - 如何使用 Windows 批处理文件遍历文本文件中的每一行?

c++ - typedef 一个可在 Windows 和 Linux 上使用的 C++ 函数

c++ - 用于枚举的模板化 QDataStream 运算符<<

c - 您如何包含标准 CUDA 库以与 NVRTC 代码链接?

c - 初始化 typedef 结构体的 typedef 字段

Java 性能 Windows 与 Linux

Python Mlab - 无法导入名称 find_available_releases