Conan 1.14:修订模式和 Artifactory 支持、新的 CMake 生成器、配置安装改进等!
最新的 Conan 1.14 版本包含了许多修复和小的改进。以下是概述!
为您的配方选择修订模式
在之前的 1.14 版本中,我们引入了**修订版本**,作为在不更改实际引用版本的情况下隐式版本化配方更改的方式。这现在作为 Conan 模型的一部分实现,这意味着远程中存在的最新修订版本是自动安装的版本(除非另有说明)。
请查看文档中的修订版本部分以了解更多信息。
修订版本功能是实现可重复性的关键步骤之一,这意味着修订版本被计算为一个唯一的 ID,称为“配方修订版本”和“包修订版本”。
此版本引入的新功能是能够为每个配方选择修订模式。您可以使用配方的内容哈希(默认)作为配方修订版本,或者使用检测到的 SCM 的提交:git
或 SVN
。
from conans import ConanFile
class MyRecipe(ConanFile):
name = "library"
version = "1.0.3"
revision_mode = "scm"
请注意,某些 CVS 系统(如 Git)对整个存储库都有唯一的提交。因此,如果您在同一个存储库中有多个配方,您可能不希望仅在一个配方中提交更改时就创建新的配方修订版本,而是仅为修改的配方创建新的修订版本。在这种情况下,您应该使用默认模式 revision_mode = "hash"
。修订版本将是配方内容的哈希值(注意不同系统之间的换行符)。
Artifactory 现在支持修订版本!
在 Conan 发布之前,新的Artifactory 6.9 版本提供了对修订版本的完全支持。
所有新的 Artifactory 版本默认都会使用修订版本。这意味着包将以新的布局存储在 Conan 存储库中:<user>/<name>/<version>/<channel>/<recipe_revision>/<package_id>/package_revision>
。
Conan 客户端 < 1.13 仍然可以工作,并且会在存储库中创建 0
的配方和包修订版本以保持兼容性。
请记住,修订版本功能是客户端的可选功能,您需要在配置中使用 conan config set general.revisions_enabled=True
或设置环境变量 CONAN_REVISIONS_ENABLED=1
来激活它。
您可以使用Artifactory 社区版 for C++开始使用修订版本。
新的 cmake_find_package_multi
生成器
继续列出用于实现透明集成的新的 CMake 生成器,我们引入了 cmake_find_package_multi
生成器来实现 Release/Debug 模式下包的多配置。
让我们尝试使用此新生成器进行入门示例
$ git clone git@github.com:conan-io/examples.git
$ cd examples/libraries/poco/md5
$ ls
CMakeLists.txt README.md build.bat build.sh* conanfile.txt md5.cpp
CMakeLists.txt 文件将更改为以下内容
cmake_minimum_required(VERSION 3.0)
project(MD5Encrypter)
set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
set(CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
find_package(Poco)
add_executable(md5 md5.cpp)
target_link_libraries(md5 Poco::Poco)
并且让我们在 conanfile.txt 中也使用新的 cmake_find_package_multi
[requires]
Poco/1.9.0@pocoproject/stable
[generators]
cmake_find_package_multi
现在我们可以安装 Release 和 Debug 包,并像往常一样使用 CMake 构建
$ mkdir build && cd build
$ conan install .. -s build_type=Debug
$ conan install .. -s build_type=Release
$ cmake .. -G "Visual Studio 15 2017 Win32"
$ cmake --build . --config Debug
.\Debug\md5.exe
c3fcd3d76192e4007dfb496cca67e13b
$ cmake --build . --config Release
.\Release\md5.exe
c3fcd3d76192e4007dfb496cca67e13b
在cmake_find_package_multi 文档中了解更多信息。
将 Conan 配置安装到文件夹
我们正在努力改进 conan config install
的功能,以便您可以混合来自不同来源的配置文件。现在,您可以选择获取文件的源文件夹和要安装文件的目标文件夹。
$ conan config install http://url/to/some/config.zip -sf=origin -tf=target
$ conan config install http://url/to/some/config.zip -sf=origin2 -tf=target2
$ conan config install http://other/url/to/other.zip -sf=hooks -tf=hooks
操作将被缓存,因此您可以执行 conan config install
,并且先前的操作将按顺序执行。
这将有助于从不同位置设置钩子,例如,测试官方钩子,如下所示
$ conan config install git@github.com:conan-io/hooks.git --source-folder hooks --target-folder hooks/conan-io
这也可以用于从存储库或 zip 文件安装特定的配置文件或远程。
在conan config 命令文档中了解更多信息。
安装包并重新构建引用
命令 conan install . --build
现在接受完整引用作为参数。您可以使用它来重新构建依赖关系图中的特定引用
$ conan install Poco/1.9.0@pocoproject/stable --build zlib/1.2.11@conan/stable
这对于在依赖关系图中单独构建依赖关系很有用,例如名称可能重复但版本、用户或通道不同的私有需求。
您也可以对完整引用使用通配符
$ conan install Poco/1.9.0@pocoproject/stable --build z*@conan/stable
在conan install 命令文档中了解更多信息。
依赖项覆盖错误
当覆盖需求时,您可能希望显式地依赖于该依赖项,而不是进行覆盖。
例如,在 conanfile.txt 中执行以下操作
[requires]
Poco/1.9.0@pocoproject/stable
OpenSSL/1.0.2r@conan/stable
第二行将使用 OpenSSL/1.0.2r@conan/stable
**覆盖** Poco
所需的 OpenSSL/1.0.2o@conan/stable
,**并**将需求添加到使用者项目中。
$ conan install .
...
WARN: Poco/1.9.0@pocoproject/stable requirement OpenSSL/1.0.2o@conan/stable overridden by your conanfile to OpenSSL/1.0.2r@conan/stable
如上所示,输出默认情况下会警告此行为。但是,如果您希望 Conan 在出现此行为时出错,则可以设置新的环境变量或 conan.conf 中的配置条目以避免未被注意的覆盖
- 环境变量:
CONAN_ERROR_ON_OVERRIDE=1
- 配置条目:
error_on_override = True
$ conan config set general.error_on_override=True
$ conan install .
...
ERROR: Poco/1.9.0@pocoproject/stable: requirement OpenSSL/1.0.2o@conan/stable overridden by your conanfile to OpenSSL/1.0.2r@conan/stable
目前,无法声明一个需求并使用 override
关键字添加它以避免为该特定依赖项引发错误。Conan 将引发一个错误,指出它重复了。有一个关于此问题的未解决的问题。
CA 证书配置
在企业组织中,通常需要使用自定义 CA 证书来执行每个 HTTP 请求。但是,如果您想通过 conan config install
安装 Conan 配置,则无法指定要使用的证书。您可以使用 --verify-ssl=False
覆盖此检查,但这并不是最合适的解决方案。
我们引入了一个环境变量和配置条目来指向要使用的证书文件
- 环境变量:
CONAN_CACERT_PATH=~/cacert.pem
- 配置条目:
cacert_path = ~/cacert.pem
最后,如果您发现错误或想开始新的讨论,请随时在此处打开新的问题。非常感谢!