Embedded Conan.io在嵌入式软件开发中的应用

Embedded Conan.io在嵌入式软件开发中的应用,embedded,conan,automotive,Embedded,Conan,Automotive,请允许我问两个关于在我们的环境中使用Conan.io的问题: 我们正在开发汽车嵌入式软件。通常,这包括COTS库的集成,最重要的是用于通信和操作系统(如AUTOSAR)。这些都在源代码中提供。典型的uC是Renesas RH850、RL78或NXP、Cypress、Infinion等公司的类似设备。我们使用gnumake(MinGW),Jenkins用于CI,并将我们自己的EclipseCDT分布作为标准化IDE 我的第一个问题: 这些第三方组件通常都充满了条件编译,以便进行适当的编译时配置。通

请允许我问两个关于在我们的环境中使用
Conan.io
的问题:

我们正在开发汽车嵌入式软件。通常,这包括COTS库的集成,最重要的是用于通信和操作系统(如AUTOSAR)。这些都在源代码中提供。典型的uC是Renesas RH850、RL78或NXP、Cypress、Infinion等公司的类似设备。我们使用
gnumake
(MinGW),Jenkins用于CI,并将我们自己的EclipseCDT分布作为标准化IDE

我的第一个问题:

这些第三方组件通常都充满了条件编译,以便进行适当的编译时配置。通过这种方法,代码和生成的二进制文件在大小和运行时行为方面都得到了优化

除了这些组件之外,我们当然还有用于不同目的的内部可重用组件。这里的编译时配置没有上面的示例中那么重,但仍然存在

一句话:我们有很多编译时配置-什么是建立基于JFrog/Conan的环境的好方法?在每一个项目中都要与资源保持联系

使用柯南进行外部参照:

有没有办法维护来自柯南的交叉参考信息?我正在寻找类似“项目xxx正在使用库lll版本vvv”的东西。这样,我们就能够在检测到问题时自动识别库的其他“用户”

非常感谢,
Stefan

柯南食谱基于python,因此非常灵活,能够实现您可能需要的任何条件逻辑

例如,
libxslt
包含如下内容:

def build(self):
    self._patch_sources()
    if self._is_msvc:
        self._build_windows()
    else:
        self._build_with_configure()
下面的示例中,autotools构建包含如下代码:

def _build_with_configure(self):
        env_build = AutoToolsBuildEnvironment(self, win_bash=tools.os_info.is_windows)
        full_install_subfolder = tools.unix_path(self.package_folder)
        # fix rpath
        if self.settings.os == "Macos":
            tools.replace_in_file(os.path.join(self._full_source_subfolder, "configure"), r"-install_name \$rpath/", "-install_name ")
        configure_args = ['--with-python=no', '--prefix=%s' % full_install_subfolder]
        if self.options.shared:
            configure_args.extend(['--enable-shared', '--disable-static'])
        else:
            configure_args.extend(['--enable-static', '--disable-shared'])
因此,柯南能够实现任何编译时配置。这并不意味着您需要始终从源代码构建。构建的参数化基本上是:

  • 设置:用于“项目范围”配置,如操作系统或体系结构。对于所有依赖项,设置值通常具有相同的值
  • 选项:用于特定于包的配置,例如库是静态的或共享的。每个包都可以有自己的值,与其他包不同

您可以使用设置和选项为包实现可变性模型,构建最常用的二进制文件。当一个给定的变量被请求时,Conan会错误地说该配置没有预编译的二进制文件。用户可以指定
--build=missing
来从源代码构建这些内容。

Hi@Stefan,我已经回答了第一个问题,但第二个问题并不完全清楚。项目或包明确声明它们使用的版本,如
requires=“pkg/version”
。请澄清你的意思,谢谢!