欢迎使用 Conan 0.9 版本!这里简要总结了一些相关的更改,虽然此版本还包含其他改进和错误修复,请立即升级!

Python 3 支持

整个代码库已更新,以提供 Python 2 和 3 的兼容性,适用于那些运行 Python 3 安装的用户。顺便说一句,它正成为现代 Linux 发行版的实际标准,因此对未来的发展至关重要。您需要注意以下几点:

  • Python 3 支持尚未经过像 Python 2 那样充分的测试,因此请将其视为“实验性”。我们已设置了持续集成(travis、appveyor)测试,以使用 Python 3 运行完整的 Conan 测试套件,因此经过几次迭代后它也将变得稳定。请使用它并报告您可能遇到的任何问题。
  • 软件包配方也必须与 Python 2 和 3 兼容。如果您正在创建软件包,所有标准用法都已经兼容。也许如果您在某些字典中使用纯“print”语句或“iteritems()”,可能会存在细微的兼容性问题,但很容易解决。使用 Python 3 的软件包用户可能会报告问题,请确保将url字段添加到您的软件包配方中,指向您的存储库,以便于协作和发送问题。

创建您自己的自定义生成器,用于您的构建系统和工具

Conan 有一些内置的生成器,例如 cmake、xcode、visual_studio…如果您使用的是不同的生成器,或者这些生成器不适合您的需求,您可以轻松地创建自己的生成器,并将其视为一个常规的软件包:上传它(如果需要,将其保存在您自己的内部服务器中),对其进行演化和版本控制,并在您的项目[requires]中引用它,以便在您的项目中动态检索和使用它。

生成器只需扩展conanfile.py中的Generator类即可创建,该类大部分是空的,仅用于定义软件包、名称、版本和元数据。

from conans.model import Generator
from conans.paths import BUILD_INFO
from conans import ConanFile, CMake
        
class Premake(Generator):
    @property
    def filename(self):
        return "conanpremake.lua"

    @property
    def content(self):     
        ...
        return "\n".join(sections)
  
class MyCustomGeneratorPackage(ConanFile):
    name = "PremakeGen"
    version = "0.1"
    url = "https://github.com/memsharded/conan-premake"
    license = "MIT"
        

在您的项目中使用此类生成器很简单,只需将其添加到您的conanfile中即可。

[requires]
Hello/0.1@memsharded/testing
PremakeGen@0.1@memsharded/testing

[generators]
Premake

已经有一个使用此功能的Premake4实验性生成器,请查看PremakeGen 软件包

如果您想了解更多关于此功能的信息,请访问文档

Conan 测试已重命名为 test_package,并更改了布局

名称conan test有点误导,因为它可能与项目单元或集成测试相关联。如果您愿意,可以在您的build()方法中轻松运行这些测试,但conan test旨在测试软件包,即它是否已正确创建,头文件是否已找到,它是否已链接(创建的库名称是否为预期名称)以及是否正确执行测试项目。

因此,命令和默认文件夹都已重命名为conan test_package。保留了向后兼容性,使用conan testtest文件夹而不是test_package文件夹仍然可以工作,但最终可能会弃用。

测试文件夹名称可以使用conan test -f选项自定义。

临时build文件夹的布局已更改。在项目根目录中通常会出于其他目的(例如构建脚本)而使用build文件夹,Conan 正在使用该名称进行临时测试构建。现在conan test_package命令在test_package文件夹内创建build文件夹,因此不会产生冲突。这可能需要对您的测试代码进行一些更改,具体取决于您使用它的方式。引入了自动检查和警告,但概括地说:您必须确保您的测试项目与位置无关(与主软件包完全相同),因此允许源内和源外构建,并且临时构建文件夹可以位于任何位置。

这通常需要测试项目的conanfile.py使用conanfile_directory属性。

self.run('cmake %s %s' % (self.conanfile_directory, cmake.command_line))

如果您使用的是 CMake,还要确保生成的 .cmake 文件位置位于${CMAKE_BINARY_DIR}中。

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)

再次感谢社区的所有反馈和支持。
继续努力!