翻譯|使用教程|編輯:鮑佳佳|2021-04-02 10:07:35.797|閱讀 523 次
概述:你可能知道,在CMake代碼中使用第三方軟件是通過包來完成的,使用find_package命令。find_package的作用就像它的名字一樣:找到一個包。如果包不存在,它會將
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
開始前先介紹一下我們的Qt商業控件:
你可能知道,在CMake代碼中使用第三方軟件是通過包來完成的,使用find_package命令。
find_package的作用就像它的名字一樣:找到一個包。如果包不存在,它會將<PackageName>_FOUND變量設置為FALSE,如果包是REQUIRED的,CMake配置會出錯。
這就是包管理器的作用。包管理器的設置可以在CMake代碼中完成,也可以通過硬編碼特定的代碼來完成,或者在配置CMake項目之前記錄下需要如何設置環境。
包管理器自動設置
CMake從3.15版本開始,允許通過CMAKE_PROJECT_INCLUDE_BEFORE注入自定義代碼,而不需要修改項目的CMake源代碼。
Qt Creator 4.15版將在初始的cmake參數中插入這一行。
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
auto-setup.cmake 是 Qt Creator 附帶的一個 cmake 腳本,它將對以下包管理器進行自動設置:conan、vcpkg、自定義 CMake 包管理器,如 cpp-pm/hunter。
這個功能可以在Qt Creator的Options -> Build & Run -> CMake中關閉,然后取消選中 "Package manager auto-setup"。
Hello World項目
為了測試此功能,我將使用fmtlib / fmt庫介紹一個Hello World項目。
CMakeLists.txt 看起來像這樣:
cmake_minimum_required(VERSION 3.15) project(hello-world) add_executable(hello-world main.cpp) find_package(fmt REQUIRED) target_link_libraries(hello-world PRIVATE fmt::fmt)main.cpp 看起來像這樣:
#include <fmt/core.h> int main() { fmt::print("Привет мир\n"); return 0; }這是Qt Creator在構建和運行應用程序后的樣子:
Qt Creator 4.15獲得了指定“工具的文本編解碼器”的功能,需要將其設置為UTF-8或IBM866才能在輸出窗格中顯示Приветмир消息。
Conan
使用conan將fmt庫放入項目就像創建conanfile.txt一樣容易:
[requires] fmt/7.1.3 [generators] cmake_find_package
CMake目標cmake_find_package需要使用conan生成器fmt::fmt。
在您的系統上獲取conan就像運行一樣容易:
pip3 install conan
這假定你的系統上已經安裝了python3。
Qt Creator的auto-setup.cmake負責為項目運行conan安裝,并盡可能地讓你的體驗不那么痛苦。這得益于conan-cmake的使用,conan-cmake也是Qt Creator的附帶工具。
如果你不想讓conan自動設置,你可以將CMake變量QT_CREATOR_SKIP_CONAN_SETUP設置為TRUE。
vcpkg
使用vcpkg將fmt庫放入項目就像創建此vcpkg.json文件一樣容易:
{ "name": "hello-world", "version-string": "0.0.1", "dependencies": [ "fmt" ] }設置以便在Qt Creator中使用就像運行一樣容易:
> git clone //github.com/microsoft/vcpkg > .\vcpkg\bootstrap-vcpkg.bat
以上命令將為vcpkg設置目錄結構,并下載一個預制的vcpkg可執行文件。
Qt Creator的auto-setup.cmake需要在PATH環境變量中加入vcpkg.exe。
在Qt Creator 4.15中,你可以在環境設置中這樣編輯PATH環境。
PATH=${PATH};c:\projects\vcpkg
auto-setup.cmake會將CMAKE_TOOLCHAIN_FILE設置為vcpkg工具鏈文件,并在這之前為VCPKG_TARGET_TRIPLET設置相應的值。
如果你不想讓vcpkg自動設置,可以將CMake變量QT_CREATOR_SKIP_VCPKG_SETUP設置為TRUE。
自定義CMake程序包管理器
Qt Creator的auto-setup.cmake會先在源目錄中查找一個名為QtCreatorPackageManager.cmake的文件后,如果找到了,那么它就被收錄了。
對于只有CMake的包管理器cpp-pm/hunter,我們可以有一個QtCreatorPackageManager.cmake,它的樣子是這樣的。
set(HUNTER_PACKAGES fmt) include(FetchContent) FetchContent_Declare(cpp-pm-setup GIT_REPOSITORY //github.com/cpp-pm/gate) FetchContent_MakeAvailable(cpp-pm-setup) set(QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP ON)
QT_CREATOR_SKIP_PACKAGE_MANAGER_SETUP會告訴auto-setup.cmake提前退出,跳過conan和vcpkg自動檢測。
下載Qt立刻體驗吧!!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: