conan入门(六):conanfile.txt conanfile.py的区别
conan conanfile.txt conanfile.py的區別
在之前的博客《conan入門(四):conan 引用第三方庫示例》中我們以cJSON為例說明了如何在項目中引用一個conan 包。
conanfile.txt
在這篇博客中我們為了引用cjson/1.7.13庫,創建了一個conanfile.txt文件用于指定json_test.c程序的依賴庫cjson
[requires] cjson/1.7.13[generators] cmake關于conanfile.txt的詳細說明參見Conan官方文檔《conanfile.txt》和《Installing dependencies》
conanafile.txt還有一些別的字段:options,imports。。。
可以理解這個conanfile.txt的作用就是定義當前項目的conan配置。conan 的install,create,export,export-pkg,upload...等命令都會用依據這個配置文件來執行。
conanfile.py
在《conan入門(三):上傳預編譯的庫(artifact)》中,我們用到了create new創建一個新的包:
使用conan new命令創建基本配置:
$ cd cjson.build/release/ $ conan new cjson/1.7.15 --bare File saved: conanfile.pyconan new會在當前文件夾下生成conanfile.py,
from conans import ConanFile from conan.tools.cmake import CMakeToolchain, CMake, cmake_layoutclass HelloConan(ConanFile):name = "hello"version = "0.1"# Optional metadatalicense = "<Put the package license here>"author = "<Put your name here> <And your email here>"url = "<Package recipe repository url here, for issues about the package>"description = "<Description of Hello here>"topics = ("<Put some tag here>", "<here>", "<and here>")# Binary configurationsettings = "os", "compiler", "build_type", "arch"options = {"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 = "CMakeLists.txt", "src/*"def config_options(self):if self.settings.os == "Windows":del self.options.fPICdef layout(self):cmake_layout(self)def generate(self):tc = CMakeToolchain(self)tc.generate()def build(self):cmake = CMake(self)cmake.configure()cmake.build()def package(self):cmake = CMake(self)cmake.install()def package_info(self):self.cpp_info.libs = ["hello"]這個conanfile.py也是用于定義當前項目的conan配置,它以python 類的方式定義了一個conan包的所有配置,顯然相對于conanfile.txt ,這個python腳本的內容要豐富許多,靈活許多(因為可以使用方法定義邏輯)。
difference
都是用于conan配置,conanfile.txt和conanfile.py有何區別?為何要設計兩種配置定義方式?如果一個項目中存在兩個定義文件文件會怎么樣?
這些問題把剛conan入門的我搞糊涂了。
谷歌上搜索了一下,發現有人與我有同樣的問題問了conan官方:《Mix conanfile.py and conanfile.txt in the same project #307》
以下是作者的回復:
conanfile.txt是一種簡單的conan配置定義方式,并不是每個程序員都懂python腳本(我就不懂),對于開發人員如果只是作為一個消費者角色(consumer),想使用conan簡化第三方庫的引用方式,在大多數情況下,一般只要正確設置requires,generators,conan就可以正常工作,那么首選使用conanfile.txt這種配置文件定義方式,因為它是更加直觀易懂的。
如果開發人員要作為生產者角色(producer),把自己的項目也封裝成conan包上傳到conan服務器供第三方使用,conanfile.txt是不能滿足要求的,必須使用全能的confile.py腳本來定義包的配置,事實上conan在分發包時就是基于python腳本的靈活性通過conanfile.py來定義包的全部配置的。所以當我們執行conan new命令創建一個新的conan配置時,自動生成的是conanfile.py腳本。
所以一個項目中是不允許conanfile.txt和conanfile.py共存的(都來是包定義,到底聽誰的呢),執行conan命令會報錯。
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入门(六):conanfile.txt conanfile.py的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux安装微信、QQ
- 下一篇: 微信小程序生命周期钩子函数