当前位置: 首页 > news >正文

起点签约的书网站给做封面吗杭州网站建设的企业

起点签约的书网站给做封面吗,杭州网站建设的企业,网站备案换ip,广西钦州有人帮做网站的公司吗一些已有的较老旧的项目只有Makefile#xff0c;一般在Linux下编译#xff0c;windows下编译需要借助cygwin或msys2,对于这样的项目如何实现conanfile.py使用conan进行构建呢#xff1f;本文以erpc/erpcgen为例#xff0c;说明实现步骤。 eRPC (Embedded RPC是一个适用于嵌…一些已有的较老旧的项目只有Makefile一般在Linux下编译windows下编译需要借助cygwin或msys2,对于这样的项目如何实现conanfile.py使用conan进行构建呢本文以erpc/erpcgen为例说明实现步骤。 eRPC (Embedded RPC是一个适用于嵌入式系统的开源RPC框架erpc/erpcgen为其下的IDL编译器编译基于Makefile.现在需要把它封装为conan的package.这就是我最近遇到的问题。 下面我们分步说明实现的要点 requires erpcgen依赖很简单只有boost requires boost/[1.69.0]build_requirements erpcgen编译依赖的工具需要flex,bision,在windows下就是winflexbison, 在windows下需要在msys2环境编译工具依赖还要加上msys2 def build_requirements(self):if self._settings_build.os Windows:self.tool_requires(winflexbison/2.5.24)self.win_bash Trueif not self.conf.get(tools.microsoft.bash:path, check_typestr):# Windows下需要在MSYS2环境编译self.tool_requires(msys2/cci.latest)else:self.tool_requires(flex/2.6.4)self.tool_requires(bison/3.7.6)msys2中的C编译器 上一节说了windows下需要在msys2环境编译msys2也是可以有自带的c编译器的。如果msys2中的c编译器与profile中定义的gcc编译版本不一致。那么erpcgen编译阶段可以正常通过但在连接过程就会报错。因为依赖库boost的适用版本是按profile中定义的编译器版本提供的。 所以在msys2环境执行编译时不能使用msys2自带的编译器需要通过CXX环境变量将windows系统安装的g编译器传递给msys2环境而使用指定的外部编译器。 所以需要在 build_requirements 方法中增加如下逻辑将在windows shell中获取g编译器的全路径保存到成员self.cxx_path注意这个时时候self.win_bash不能为True def build_requirements(self):if self._settings_build.os Windows:# 获取 windows系统定义的g编译器位置buf StringIO()self.run(where g,stdoutbuf)if not buf.getvalue():raise Exception(Not found g compiler by where gcc)# 获取命令返回的第一行,删除末尾的换行符self.cxx_path buf.getvalue().strip().split(\r\n)[0]然后这个self.cxx_path会在后面的AutotoolsToolchain生成时被定义到CXX环境变量中 generate erpcgen中需要的编译工具flex,bision的可执行程序头文件位置以及boost的位置都是通过环境变量提供给Makefile的。所以需要在 generate 方法中定义相应的环境变量FLEX,BISON,BOOST_ROOT,INCLUDES 同时还有上一节涉及到的将windows系统下的C编译器位置通过定义CXX变量提供给msys2环境。 这里使用AutotoolsToolchain实现环境变量修改与后面的package方法中的Autotools匹配 def generate(self):tc AutotoolsToolchain(self)env tc.environment()if self._settings_build.os Windows:# erpcgen中使用环境变量FLEX定义flex,BISON定义bison,# 与winflexbison加载时定义的变量名不一样,所以这里要# 定义环境变量 FLEX$LEX,BISON$YACCenv.define(FLEX,self.dependencies.build[winflexbison].buildenv_info.vars(self).get(LEX))env.define(BISON,self.dependencies.build[winflexbison].buildenv_info.vars(self).get(YACC))include_path unix_path(self,os.path.join(self.dependencies.build[winflexbison].package_folder, include))# 使用外部定义的C编译器避免使用msys2内置的编译器否则会因为编译版本不一致导致连接错误env.define(CXX,unix_path(self,self.cxx_path))else:# 定义环境变量 FLEX$LEX,BISON$BISON_ROOT/bin/bisonenv.define(FLEX,os.path.join(self.dependencies.build[flex].package_folder,bin, flex))env.define(BISON,self.dependencies.build[bison].buildenv_info.vars(self).get(CONAN_BISON_ROOT) /bin/bison)include_path os.path.join(self.dependencies.build[flex].package_folder, include)# 将 flex的include文件夹添加到INCLUDES环境变量参见 erpc/erpcgen/Makefile中INCLUDES变量env.append(INCLUDES,include_path)# 指定boost位置boost_root unix_path(self,self.dependencies[boost].package_folder) env.define(BOOST_ROOT,boost_root)env.append(LDFLAGS,-L os.path.join(boost_root,lib))tc.generate(env)# 输出环境变量self.output.info(Environment Variables:)for name, value in env.vars(self).items():self.output.info(f{name}{value})package 虽然erpcgen项目不是autools生成的项目但它可以调用make执行Makefile.所以在此一样可以使用AutotoolsToolchainAutotools实现编译 如下package方法执行Autotools.install 方法实现 erpcgen编译并安装到package_folder def package(self):autotools Autotools(self)autotools.install(args[-C, erpc/erpcgen, PREFIX{}.format(unix_path(self,self.package_folder))])完整代码 完整的python代码 from conan import ConanFile,tools from conan.tools.env import VirtualBuildEnv from conan.tools.microsoft.subsystems import unix_path from conan.tools.files import chdir from conan.tools.gnu import Autotools, AutotoolsToolchain import os from six import StringIOclass ErpcgenConan(ConanFile):name erpcgenversion 1.7.3-patch# Optional metadatalicense BSD-2-Clauseauthor guyadong 10km0811sohu.comurl https://gitee.com/l0km/erpcexdescription erpcgen base NXP Embedded RPCtopics (embedded,erpc,nxp,erpcgen)package_type applicationrequires boost/[1.69.0]# Binary configurationsettings os, compiler, build_type, archoptions {shared: [True, False], fPIC: [True, False]}default_options {shared: False, fPIC: True}# Sources are located in the same place as this recipe, copy them to the recipeexports_sources erpc/*propertydef _settings_build(self):return getattr(self, settings_build, self.settings)propertydef _cxx_path(self):if self._settings_build.os Windows:buf StringIO()self.run(where g,stdoutbuf)if not buf.getvalue():raise Exception(Not found g compiler by where gcc)# 获取命令返回的第一行return buf.getvalue().strip().split(\r\n)[0]else:return def config_options(self):if self.settings.os Windows:del self.options.fPICif self.settings.compiler msvc:# 不支持Visual Studio编译,报错退出raise Exception(Unsupport Visual Studio,plese use MinGw compiler for Windows)def build_requirements(self):if self._settings_build.os Windows:# 获取 windows系统定义的g编译器位置buf StringIO()self.run(where g,stdoutbuf)if not buf.getvalue():raise Exception(Not found g compiler by where gcc)# 获取命令返回的第一行self.cxx_path buf.getvalue().strip().split(\r\n)[0]self.tool_requires(winflexbison/2.5.24)self.win_bash Trueif not self.conf.get(tools.microsoft.bash:path, check_typestr):# Windows下需要在MSYS2环境编译self.tool_requires(msys2/cci.latest)else:self.tool_requires(flex/2.6.4)self.tool_requires(bison/3.7.6)def generate(self):tc AutotoolsToolchain(self)env tc.environment()if self._settings_build.os Windows:# erpcgen中使用环境变量FLEX定义flex,BISON定义bison,# 与winflexbison加载时定义的变量名不一样,所以这里要# 定义环境变量 FLEX$LEX,BISON$YACCenv.define(FLEX,self.dependencies.build[winflexbison].buildenv_info.vars(self).get(LEX))env.define(BISON,self.dependencies.build[winflexbison].buildenv_info.vars(self).get(YACC))include_path unix_path(self,os.path.join(self.dependencies.build[winflexbison].package_folder, include))# 使用外部定义的C编译器避免使用msys2内置的编译器否则会因为编译版本不一致导致连接错误env.define(CXX,unix_path(self,self.cxx_path))else:# 定义环境变量 FLEX$LEX,BISON$BISON_ROOT/bin/bisonenv.define(FLEX,os.path.join(self.dependencies.build[flex].package_folder,bin, flex))env.define(BISON,self.dependencies.build[bison].buildenv_info.vars(self).get(CONAN_BISON_ROOT) /bin/bison)include_path os.path.join(self.dependencies.build[flex].package_folder, include)# 将 flex的include文件夹添加到INCLUDES环境变量参见 erpc/erpcgen/Makefile中INCLUDES变量env.append(INCLUDES,include_path)# 指定boost位置boost_root unix_path(self,self.dependencies[boost].package_folder) env.define(BOOST_ROOT,boost_root)env.append(LDFLAGS,-L os.path.join(boost_root,lib))tc.generate(env)# 输出环境变量self.output.info(Environment Variables:)for name, value in env.vars(self).items():self.output.info(f{name}{value})def package(self):autotools Autotools(self)autotools.install(args[-C, erpc/erpcgen, PREFIX{}.format(unix_path(self,self.package_folder))])完整的项目参见我的代码仓库https://gitee.com/l0km/erpcex conanfile-erpcgen.py 使用示例 conan create .\conanfile-erpcgen.py conan系列文章 《conan入门(一):conan 及 JFrog Artifactory 安装》 《conan入门(二)conan 服务配置-密码管理及策略》 《conan入门(三):上传预编译的库(artifact)》 《conan入门(四):conan 引用第三方库示例》 《conan入门(五):conan 交叉编译引用第三方库示例》 《conan入门(六):conanfile.txt conanfile.py的区别》 《conan入门(七):将自己的项目生成conan包》 《conan入门(八):交叉编译自己的conan包项目》 《conan入门(九):NDK交叉编译自己的conan包项目塈profile的定义》 《conan入门(十):Windows下Android NDK交叉编译Boost》 《conan入门(十一):Linux下Android NDK交叉编译Boost》 《conan入门(十二):Windows NDK 编译 boost报错:CMake was unable to find a build program … MinGW Makefile》 《conan入门(十三):conan info 命令的基本用法》 《conan入门(十四):conan new 命令的新特性–模板功能(–template)》 《conan入门(十五):AttributeError: ‘CMake‘ object has no attribute ‘definitions‘》 《conan入门(十六):profile template功能实现不同平台下profile的统一》 《conan入门(十七):支持android NDK (armv7,armv8,x86,x86_64)交叉编译的统一profile jinja2模板》 《conan入门(十八):Cannot recognize the Windows subsystem, install MSYS2/cygwin or specify a build_require》 《conan入门(十九):封装第三方开源库cpp_redis示例》 《conan入门(二十):封装只包含头文件(header_only)的库示例》 《conan入门(二十一):解决MinGW编译Openssl的编译错误:crypto/dso/dso_win32.c》 《conan入门(二十二):编译 openssl要求python 3.7以上版本》 《conan入门(二十三):Windows下MinGW编译libcurl》 《conan入门(二十四):通过CONAN_DISABLE_CHECK_COMPILER禁用编译器检查》 《conan入门(二十五):imports将包安装到本地项目或其他指定位置》 《conan入门(二十七):因profile [env]字段废弃导致的boost/1.81.0 在aarch64-linux-gnu下交叉编译失败》 《conan入门(二十八):解决conan 1.60.0下 arch64-linux-gnu交叉编译openssl/3.1.2报错问题》 《conan入门(二十九):对阿里mnn进行Conan封装塈conans.CMake和conan.tools.cmake.CMake的区别》 《conan入门(三十):对腾讯ncnn进行Conan封装》 《conan入门(三十一):在命令行(shell)中从profile中读取配置参数》 《conan 入门(三十二):package_info中配置禁用CMakeDeps生成使用项目自己生成的config.cmake》 《conan 入门(三十三):requirements()指定header的可见性(transitive_headers)》 《conan 入门(三十四):conan 2.x实现对只有Makefile的项目(erpcgen)的封装示例》
http://www.zqtcl.cn/news/320512/

相关文章:

  • 网站被host重定向处理浙江网新股吧
  • asp国外网站什么页游好玩
  • 高端简约30平米办公室装修广州搜索seo网站优化
  • 海口的网站建设公司wordpress二次元极简主题
  • 南京快速建站公司国家网站域名
  • 兰州装修公司哪家好网站seo推广员招聘
  • 郑州网站推广 汉狮网络易企秀类似的软件
  • 做外单网站成都网页制作公司排名
  • 成都优化网站关键词搜索引擎有哪些平台
  • 福建百川建设有限公司网站郑州手机软件开发公司
  • 盐城企业做网站多少钱88建网站
  • 南京网站制作报价wordpress主题 yusi
  • 北京建网站已备案网站新增接入
  • 做搬家服务网站问卷调查的目的房产网签是什么意思
  • 江苏品牌网站设计美团后台管理系统登录
  • 没有备案的网站会怎么样深圳的互联网公司排名
  • 阿里云 建设网站北京百度竞价托管公司
  • 怎么样做长久的电影网站安卓手机应用市场
  • 网站建设账户搭建济南网络优化哪家专业
  • 宜兴城乡建设局网站wordpress调用logo
  • 让他人建设网站需要提供的材料女生读电子商务好就业吗
  • 北大荒建设集团网站国内开源代码网站
  • 高端企业网站要多少钱中企动力z云邮箱登录
  • 网站建设视频教程百度云那种自行提取卡密的网站怎么做
  • 网站外链建设与维护网站建设客户调研表
  • 海南省建设银行官方网站招聘营销的主要目的有哪些
  • flask 简易网站开发网站建设和空间
  • 怀化建设网站wordpress静态化插件
  • 网站上的中英文切换是怎么做的大连网站制作优选ls15227
  • 网站开发工作安排广告设计公司有哪些