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

哪里可以学做网站wordpress 文章加评论

哪里可以学做网站,wordpress 文章加评论,产品设计毕业设计作品,制作网站需要什么知识一些已有的较老旧的项目只有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/962869/

相关文章:

  • 生物网站模板在线crm厂商
  • 在线制作动画网站ps切图做网站
  • 西安企业网站建设公司虚拟主机可以做视频网站嘛
  • 做淘客网站用什么程序今天杭州新闻最新消息
  • 东莞专业建网站网站制作方案相信乐云seo
  • 网站分页符素材怎么解决
  • 行远金华网站建设公司合肥公司做网站
  • 餐厅类网站模板中国电建市政建设集团有限公司网站
  • 格力网站建设首页六盘水遵义网站建设怎么做
  • 建设工程企业资质工作网站创建网站怎么赚钱的
  • 三水网站建设流感吃什么药最好
  • 洛阳市住房和城乡建设局网站怎么查询企业注册信息
  • 商业摄影网站源码wordpress文章作者
  • 昆明企业网站模板建站漳浦建设局网站更新
  • 企业网站建设策划书微信开发者工具是干嘛的
  • 泵 品牌网站建设WordPress头像不能本地化
  • vue快速建站网站开发法律
  • 家居行业网站开发百度竞价推广账户
  • 粉色大气妇科医院网站源码百度网址大全网址
  • wordpress 留言墙插件优化网站搭建
  • 优秀设计师网站芯片设计公司
  • 铜陵网站建设公司wordpress密码访问插件
  • 一个公司做2个产品网站怎么做的wordpress网站怎么百度的到
  • 邓州做网站做网站seo怎么赚钱
  • 微信小程序开发步骤图长沙百度seo
  • 网站代做仿百度图片网页设计
  • 广州建设局网站首页网络营销专业的就业方向
  • wordpress单页seo关键词优化培训
  • 网站301多久短信营销平台
  • 江苏省现代化实训基地建设网站网站备案加速