我想将我当前的项目移动到 C++11。代码全部使用 clang++ -std=c++0x 编译。这是容易的部分:-)。困难的部分是处理外部库。不能依赖将自己的 C++11 对象与未使用 c++11 编译的外部库链接(参见http://gcc.gnu.org/wiki/Cxx11AbiCompatibility)。例如,Boost 肯定需要重新构建(Why can't clang with libc++ in c++0x mode link this boost::program_options example?)。我有我使用的所有外部库的源代码,所以我可以(有些痛苦)理论上用 C++11 重新构建这些库。但是,这仍然给我留下了一些问题:
在混合 C++03/C++11 环境中开发:我有一些使用 C++03 的旧项目需要偶尔维护。当然,我希望将这些与现有版本的外部库链接起来。但是对于我当前的(和新的)项目,我想链接我重新构建的 C++11 版本的库。我该如何组织我的开发环境(目前是 Ubuntu 12.04 和 Mac OS X 10.7)来应对这个问题?
我假设许多开发人员都会面临这个问题。它不会消失,但我还没有找到推荐和普遍认可的解决方案。
部署:目前,我部署到云中的 Ubuntu 12.04 LTS 服务器。经验导致人们(在可能的情况下)依赖于 linux 发行版中可用的标准软件包(例如 libboost)。如果我将当前项目迁移到 c++11,我的理解是我将不得不构建我自己使用的外部库的版本。我的猜测是,在某些时候这会改变,它们将是具有 C++11 兼容性的库包的“标准”版本。有谁知道什么时候会发生这种情况?并且大概这也需要对上述问题的标准解决方案——在同一平台上同时存在 C++03 库和 C++11 库。
我希望我错过了一些基本的东西,以便这些感知到的问题在一阵适当的信息中消失!我是否试图过早迁移到 C++11?
更新(2013-09-11):macports 的相关讨论:https ://lists.macosforge.org/pipermail/macports-users/2013-September/033383.html