在这个版本中,我们引入了重大的改进,从使用隔离的Conan环境到更好的远程管理和更新功能。

我们还解决了一些与新gcc > 5.1编译器(现在有两个不同的实现:标准实现和新的C++11实现)的libstdc++ ABI不兼容性相关的问题。

C++项目

因此,当使用现代编译器(gcc>5.1)构建C++库时,您可以选择使用哪一个,并且此设置必须与整个项目和构建设置保持一致。

因此,我们在默认设置中引入了这个新设置,您可以在~/.conan/settings.yml中查看它们。

os: [Windows, Linux, Macos, Android, iOS]
arch: [x86, x86_64, armv6, armv7, armv7hf, armv8]
compiler:
    gcc:
        version: ["4.4", "4.5", "4.6", "4.7", "4.8", "4.9", "5.1", "5.2", "5.3"]
        libcxx: [libstdc++, libstdc++11]
    Visual Studio:
        runtime: [MD, MT, MTd, MDd]
        version: ["8", "9", "10", "11", "12", "14"]
    clang:
        version: ["3.3", "3.4", "3.5", "3.6", "3.7"]
        libcxx: [libstdc++, libstdc++11, libc++]
    apple-clang:
        version: ["5.0", "5.1", "6.0", "6.1", "7.0"]
        libcxx: [libstdc++, libc++]

build_type: [None, Debug, Release]

~/.conan/conan.conf中的默认自动检测设置将为libcxx=libstdc++,无论您的编译器是什么,因为它是最兼容的设置。

如果您使用gcc>5.1构建包,则应重新生成您的包以考虑此新设置。首先,删除您现有的包,包括本地和远程的。

$ conan remove MyPackage* -f 
$ conan remove MyPackage* -f -r=conan.io

然后,重新构建它们。如果您使用test命令,可以执行以下操作:

$ conan test -s compiler=gcc -s compiler.version=5.3 -s compiler.libcxx=libstdc++11

请注意,libstdc++版本不仅取决于编译器,还取决于您的发行版。旧发行版的libstdc++在不升级系统大部分的情况下无法升级,因此它仍然使用libstdc++,即使将gcc升级到5.2或5.3也是如此。

相反,现代发行版已经拥有一个具有最新libstdc++11作为默认设置的现代gcc。这些现代系统可以选择使用旧的libstdc++,因此在这些系统上指定-s compiler.libcxx=libstdc++有效,并且生成的包也可以轻松地被旧发行版中的用户使用。当然,您可以构建这两个版本的包,一个使用libstdc++11,另一个使用libstdc++。

类似的推理适用于Apple Clang中的libc++。

C项目

最后,需要注意的是,纯C项目与这个libcxx设置无关,因此,对于C项目,正确的方法是指定它们不依赖于此设置,这可以在它们的conanfile.py中完成,如下所示:

def config(self):
    del self.settings.compiler.libcxx

远程管理

以前,远程在conan.conf文件中定义,但现在使用新的remote命令,它们存储在~/.conan/registry.txt中的另一个文件中,该文件存储有关远程URL和包的信息。默认情况下,它初始化为两个远程,一个本地测试远程(指向localhost,用于测试conan_server)和conan.io远程。如果您有自己的远程,您可以编辑该文件,或者更好地尝试使用新的conan remote命令。

$ conan remote list
$ conan remote remove local 
$ conan remote add myremote http://myremote.url
$ conan remote list

自动化包创建

最后,如果您正在创建包,您可能希望查看conan-package-tools的最新版本,一些用于在travis-ci、appveyor持续集成系统中构建Win、Linux、OSX多种配置的实用程序。我们使用它们通过推送到github来为许多库创建数百个包。