conan 入門(三十二):package_info中配置禁用CMakeDeps生成使用項目自己生成的config.cmake

conanfile.py中定義的package_info()方法用于向package的調用者(conumer)提供包庫名,編譯/連接選項,文件夾等等信息,有了這些信息構建工具的generator就可以根據它們生成對應的文件,用于調用者引用package.
比如基于cmake的CMakeDeps可以根據這些信息自動生成Find<Package>.cmake<Package>-config.cmake.
調用者的CMakeLists.txt中通過FindPackage(<Package>)就可以自動找到package.創建對應的import target.

比如我為mnn 項目寫的conanfile.py(https://gitee.com/l0km/mnn/blob/conan1.2.7/conanfile.py)

    def package_info(self):self.cpp_info.libs = ["MNN"]if not self.options.shared :if self.settings.compiler == "msvc":self.cpp_info.sharedlinkflags.extend(["/WHOLEARCHIVE:MNN"])self.cpp_info.exelinkflags = self.cpp_info.sharedlinkflagselif self.settings.compiler == "gcc":# about LINKER: ,see also https://cmake.org/cmake/help/latest/command/target_link_options.html#handling-compiler-driver-differencesself.cpp_info.sharedlinkflags.extend(["LINKER:--whole-archive",self._mnn_lib,"LINKER:--no-whole-archive"])self.cpp_info.exelinkflags = self.cpp_info.sharedlinkflagselif self.settings.compiler == "clang":self.cpp_info.sharedlinkflags.extend(["LINKER:--whole-archive",self._mnn_lib,"LINKER:--no-whole-archive"])self.cpp_info.exelinkflags = self.cpp_info.sharedlinkflags

mnn這個項目本身沒有生成cmake配置文件,但conan會在調用方在引用mnn package時CMakeDeps generator會自動生成mnn-config.cmake及相關文件,如下圖,這樣就減少了package開發中編譯腳本的工作量。
在這里插入圖片描述

但是有的時候,package本身的CMake編譯腳本中已經有了config-cmake生成的邏輯,可以自己生成config-cmake.我們可以通過在package_info()進行配置,讓conan使用package自帶的config.cmake.而不需要CMakeDeps生成cmake配置文件。

如下在package_info中定義builddirscmake_find_mode參數就可以實現

    def package_info(self):self.cpp_info.builddirs.append(self.package_folder)self.cpp_info.set_property("cmake_find_mode", "none")

參見 《Disable CMakeDeps For Installed CMake configuration files》

jpegwrapper是我幾年前寫的一個jpeg相關項目,最近給它增加了conan支持,這個項目原本就會自動生成config.cmake。所以寫conanfile.py時我希望調用者使用原本的config.cmake,
所以在package_info方法就是通過上面的定義來實現的:

https://gitee.com/l0km/jpegwrapper/blob/master/conanfile.py

    def package_info(self):self.cpp_info.libs = ["jpegwrapper"]# 指定將安裝路徑加入CMAKE_PREFIX_PATH,以便執行find_package時能掃描到安裝路徑self.cpp_info.builddirs.append(self.package_folder)# 抑制conan生成jpegwrapper-config.cmake使用jpegwrapper自己生成的cmake配置文件 self.cpp_info.set_property("cmake_find_mode", "none")# cmake_find_mode為none時不需要配置此參數#self.cpp_info.requires = ["common_source_cpp::common_source_cpp","libjpeg-turbo::libjpeg-turbo","openjpeg::openjpeg"]

參考資料

《package_info》
《Recipe tools》
《CMakeDeps》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166427.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166427.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166427.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線索二叉樹:C++實現

引言&#xff1a; 線索二叉樹是一種特殊的二叉樹&#xff0c;它可以通過線索&#xff08;線索是指在二叉樹中將空指針改為指向前驅或后繼的指針&#xff09;的方式將二叉樹轉化為一個線性結構&#xff0c;從而方便對二叉樹進行遍歷。本文將介紹如何使用C實現線索二叉樹。 技術…

安全地公網訪問樹莓派等設備的服務 內網穿透--frp 23年11月方法

如果想要樹莓派可以被公網訪問&#xff0c;可以選擇直接網上搜內網穿透提供商&#xff0c;一個月大概10塊錢&#xff0c;也有免費的&#xff0c;但是免費的速度就不要希望很好了。 也可以選擇接下來介紹的frp&#xff0c;這種方式不需要付費&#xff0c;但是需要你有一臺有著公…

vue3自定義拖拽指令

<template><div v-move class"box"></div> </template><script setup lang"ts"> import { Directive } from vue const vMove:Directive (el:HTMLElement) >{const mousedown (e:MouseEvent) >{// 鼠標按下const s…

【Golang】解決使用interface{}解析json數字會變成科學計數法的問題

在使用解析json結構體的時候&#xff0c;使用interface{}接數字會發現變成了科學計數法格式的數字&#xff0c;不符合實際場景的使用要求。 舉例代碼如下&#xff1a; type JsonUnmStruct struct {Id interface{} json:"id"Name string json:"name"…

Linux 的性能調優的思路

Linux操作系統是一個開源產品&#xff0c;也是一個開源軟件的實踐和應用平臺&#xff0c;在這個平臺下有無數的開源軟件支撐&#xff0c;我們常見的apache、tomcat、mysql等。 開源軟件的最大理念是自由、開放&#xff0c;那么Linux作為一個開源平臺&#xff0c;最終要實現的是…

Java反射調用kotlin中的類,Object類,Companion對

Java反射調用kotlin中的類&#xff0c;Object類&#xff0c;Companion對象 1. Java反射調用kotlin中的普通類 kotlin普通類&#xff1a; package com.common; class TestNormal {fun get():String{return "Nolmal abc"}fun showNum(v:Int){println("Nolmal s…

uniApp微信支付實現

后端&#xff1a;小程序下單 - 小程序支付 | 微信支付商戶文檔中心 服務端需要請求&#xff1a;https://api.mch.weixin.qq.com該地址獲取微信支付Api接口需要的參數。 服務端請求接口需要的Body參數&#xff1a; 客戶端&#xff08;前端&#xff09;需要調用&#xff1a;wx.…

12V降3.3V100mA穩壓芯片WT7133

12V降3.3V100mA穩壓芯片WT7133 WT71XX系列是一款采用CMOS工藝實現的三端高輸入電壓、低壓差、小輸出電流電壓穩壓器。 它的輸出電流可達到100mA&#xff0c;輸入電壓可達到18V。其固定輸出電壓的范圍是2.5V&#xff5e;8.0V&#xff0c;用戶 也可通過外圍應用電路來實現可變電壓…

加載minio中存儲的靜態文件html,不顯示樣式與js

問題描述:點擊鏈接獲取的就是純靜態文件,但是通過瀏覽器可以看到明明加載了css文件與js文件 原因:仔細看你會發現加載css文件顯示的contentType:text/html文件,原來是minio上傳文件時將所有文件的contentType設置成了text/html 要在上傳時指定文件,根據文章的類型指定的Conten…

css 固定按鈕到頁面頂部或者底部的實現方式

實現方式 要將按鈕固定到頂部或底部&#xff0c;可以使用CSS的定位屬性來實現。下面是一種常用的方法&#xff1a; 創建一個包含按鈕的HTML元素&#xff0c;例如一個<div>元素。確保給它添加一個唯一的id&#xff0c;以便在CSS中進行定位。 <div id"myButton&qu…

從二極管到linux服務器

軟件設計: os: 批處理系統: 輪詢系統:單片機裸機開發 實時系統:ucosii,rtos,rt-thread、風和系統、liteos(主要是海思系列soc在用)等 非實時系統:linux 對os任務切換時寄存器的功能有理解。 對ipc機制有理解。 bsp: 需要對寄存器、單片機內部總線、iic、spi、uart、c…

win10開機黑屏只有鼠標?這份指南幫你輕松解決!

win10是一個出色的操作系統&#xff0c;但有時用戶可能會遇到開機后只有鼠標顯示在屏幕上的問題&#xff0c;這種情況可能會讓人感到困惑和沮喪。在本文中&#xff0c;我們將介紹三種解決win10開機黑屏只有鼠標的方法&#xff0c;以幫助您快速恢復正常的桌面環境。 方法1&#…

Ubuntu18.4中安裝wkhtmltopdf + Odoo16配置【二】

deepin Linux 安裝wkhtmltopdf 1、先從官網的鏈接里下載linux對應的包 wkhtmltopdf/wkhtmltopdf 下載需要的版本&#xff0c;推薦版本&#xff0c;新測有效&#xff1a; wkhtmltox-0.12.4_linux-generic-amd64.tar.xz 2、解壓下載的文件 解壓后會有一個wkhtmltox文件夾 3…

CTA-GAN:基于生成對抗性網絡的主動脈和頸動脈非集中CT血管造影 CT到增強CT的合成技術

Generative Adversarial Network–based Noncontrast CT Angiography for Aorta and Carotid Arteries 基于生成對抗性網絡的主動脈和頸動脈非集中CT血管造影背景貢獻實驗方法損失函數Thinking 基于生成對抗性網絡的主動脈和頸動脈非集中CT血管造影 https://github.com/ying-f…

可自行DIY單TYPE-C接口設備實現DRP+OTG功能芯片

隨著USB-C接口的普及&#xff0c;歐盟的法律法規強制越來越多的設備開始采用這種接口。由于 USB-C接口的高效性和便攜性&#xff0c;使各種設備之間的連接和數據傳輸變得非常方便快捷&#xff0c;它們不僅提供了強大的功能&#xff0c;還為我們的日常生活和工作帶來了極大的便利…

Python與設計模式--代理模式

5-Python與設計模式–代理模式 一、網絡服務器配置白名單 代理模式是一種使用頻率非常高的模式&#xff0c;在多個著名的開源軟件和當前多個著名的互聯網產品后 臺程序中都有所應用。下面我們用一個抽象化的簡單例子&#xff0c;來說明代理模式。 首先&#xff0c;構造一個網絡…

ssm+vue的企業文檔管理系統(有報告)。Javaee項目,ssm vue前后端分離項目。

演示視頻&#xff1a; ssmvue的企業文檔管理系統&#xff08;有報告&#xff09;。Javaee項目&#xff0c;ssm vue前后端分離項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系結構&…

Talk | 牛津大學博士后研究員邊佳旺:SC-DepthV3-動態場景中的自監督單目深度估計

本期為TechBeat人工智能社區第550期線上Talk。 北京時間11月23日(周四)20:00&#xff0c;牛津大學博士后研究員—邊佳旺的Talk已準時在TechBeat人工智能社區開播&#xff01; 他與大家分享的主題是: “SC-DepthV3&#xff1a;動態場景中的自監督單目深度估計”&#xff0c;介紹…

Vocoder,聲碼器詳解——語音信號處理學習(十)

參考文獻&#xff1a; [1] Vocoder (由助教許博竣同學講授)嗶哩嗶哩bilibili [2] Oord A, Dieleman S, Zen H, et al. Wavenet: A generative model for raw audio[J]. arXiv preprint arXiv:1609.03499, 2016. [3] https://deepmind.com/blog/article/wavenet-generative-mode…

【華為OD機試題】 給出一個區間的集合,請合并所有重疊的區間。

給出一個區間的集合&#xff0c;請合并所有重疊的區間。 示例 1: 輸入: [[1,3],[2,6],[8,10],[15,18]] #輸出: [[1,6],[8,10],[15,18]] 解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6]. 示例 2: #輸入: [[1,4],[4,5]] #輸出: [[1,5]] #解釋: 區間 [1,4] 和 [4,5] 可被視…