更新时间:2023-02-04 09:48:06浏览次数:949+次
本文介绍如何在Linux系统上安装和使用Conan的方法。Conan是C和C++语言的免费开源依赖项和包管理器,该工具类似于NuGet、用于.NET的npm和JavaScript。Conan是一个跨平台工具,可以在任何支持Python的平台上运行,如Windows、Mac和Linux系统。Conan拥有ConanCenter,这是一个包含无数开源库以及主流编译器的预编译二进制文件的中央存储库,这些包由Github存储库和Slack中的一个大型活跃社区维护。此外,Conan还与JFrog artifactory集成,其中包括Conan的免费artifactory社区版,这允许开发人员在其服务器上构建自己的包。
在Linux系统上安装Conan
有几种方法可以用来在Linux上安装Conan。此处介绍的方法包括:使用PIP(推荐)、使用包管理器、从源生成。
选项1:使用pip安装Conan(推荐)
Conan可以使用Python PIP轻松安装。您只需要在系统上安装Python 3.5及更高版本。
使用以下命令在系统上安装Python 3和PIP:
##对于Debian/Ubuntu
sudo apt install python3 python3-pip
##对于RHEL/CentOS/Rocky Linux/Alma Linux
sudo yum install python3 python3-pip
安装后,验证Python版本:
$ python3 --version
Python 3.9.2
现在使用Python PIP,安装Conan包管理器:
sudo pip3 install conan
样本输出:
Successfully installed Jinja2-3.0.3 MarkupSafe-2.0.1 PyJWT-1.7.1 bottle-0.12.19 certifi-2021.10.8 charset-normalizer-2.0.12 colorama-0.4.4 conan-1.46.0 distro-1.6.0 fasteners-0.17.3 importlib-resources-5.4.0 node-semver-0.6.1 patch-ng-1.17.4 pluginbase-1.0.1 pygments-2.11.2 python-dateutil-2.8.2 requests-2.27.1 tqdm-4.63.0 urllib3-1.26.8 zipp-3.6.0
选项2:使用包管理器安装Conan
Conan也可以从brew和AUR等软件包管理器安装。
1]、AUR (Arch Linux)
yay -S conan
你也可以从Conan网站下载二进制文件来安装Conan,地址在https://conan.io/downloads.html。这里有适用于Windows、Linux的软件包。
对于Conan For Linux(Debian/Ubuntu)版本,请下载.DEB包文件,并使用以下命令将其安装在Debian/Ubuntu上:
wget https://github.com/conan-io/conan/releases/latest/download/conan-ubuntu-64.deb
sudo dpkg -i conan-ubuntu-64.deb
样本输出:
Selecting previously unselected package conan.
(Reading database ... 71512 files and directories currently installed.)
Preparing to unpack conan-ubuntu-64.deb ...
Unpacking conan (1.46.0) ...
Setting up conan (1.46.0) ...
选项3:从源代码构建Conan
这是在他们的系统上安装Conan的另一种方法。安装git后,按以下步骤操作:
使用以下命令在系统上安装Python 3:
##对于Debian/Ubuntu
sudo apt install python3
##对于RHEL/CentOS/Rocky Linux/Alma Linux
sudo yum install python3
继续进行Conan安装:
git clone https://github.com/conan-io/conan.git conan_src
cd conan_src
sudo python3 -m pip install -e .
安装后,使用以下命令验证Conan安装:
$ conan
使用Conan管理C和C++包
现在安装了Conn,我们可以获取和构建包。例如,这里我们将有一个依赖于第三方库(SQLite)的C++项目。这个项目将尝试在SQLite(testdb)中打开一个数据库。如果数据库不存在,将创建名称为的n个数据库。如果无法打开和创建数据库,则打印的输出将是“无法打开SQLite数据库(Can’t open the SQLite database)”。
创建项目文件:
vim test_conan.cpp
在文件中,添加以下行:
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3 *db;
int rc = sqlite3_open("test.db", &db);
if (SQLITE_OK == rc) {
std::cout << "Opened SQLite database successfully! \n";
sqlite3_close(db);
} else {
std::cout << "Can't open the SQLite database: " << sqlite3_errmsg(db) << "\n";
}
return 0;
}
现在我们将使用Conan获取SQLite包。但首先,我们需要确定要使用的版本:
$ conan search sqlite3* --remote=conancenter
Existing package recipes:
sqlite3/3.29.0
sqlite3/3.30.1
sqlite3/3.31.0
sqlite3/3.31.1
sqlite3/3.32.1
sqlite3/3.32.2
.....
sqlite3/3.35.4
sqlite3/3.35.5
sqlite3/3.36.0
sqlite3/3.37.0
sqlite3/3.37.1
sqlite3/3.37.2
sqlite3/3.38.0
sqlite3/3.38.1
选择最新的可用包,创建conanfile.txt文件,并在其中包含包名。此外,指定要使用的生成器(CMake):
$ vim conanfile.txt
[requires]
sqlite3/3.38.1
[generators]
cmake
确保安装了Cmake、GCC和Ninja版本:
##对于Debian/Ubuntu
sudo apt-get install build-essential
sudo apt install cmake ninja-build
##对于RHEL/CentOS/Rocky Linux/Alma Linux
sudo yum install cmake
sudo yum install epel-release
sudo dnf config-manager --set-enabled powertools
sudo yum install ninja-build
sudo yum groupinstall "Development Tools" -y
最后,创建CMakeLists.txt文件,其中包括项目的设置:
$ vim CMakeLists.txt
cmake_minimum_required (VERSION 3.8)
project(TestConan CXX)
set(CMAKE_CXX_STANDARD 11)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
add_executable(testConan test_conan.cpp)
target_link_libraries(testConan ${CONAN_LIBS})
将编译器设置为GCC。首先,确定编译器版本:
$ gcc --version
gcc (GCC) 8.5.0
编译器可以导出如下:
export CONAN_COMPILER=gcc
export CONAN_COMPILER_VERSION=4.8
或者,可以通过编辑文件进行设置:
$ vim .conan/profiles/default ***
[settings]
os=Linux
os_build=Linux
arch=x86_64
arch_build=x86_64
compiler=gcc
compiler.version=8
compiler.libcxx=libstdc++
build_type=Release
[options]
[build_requires]
[env]
记住将compiler.version设置为从命令中获得的确切编译器版本,运行gcc --version。
就是这样,现在继续为SQLite构建依赖库。通常通过创建一个新目录并在那里运行Conan命令来完成:
mkdir build
cd build
conan install ..
生成源代码。在这里,我们将使用Ninja来构建系统:
cmake .. -G Ninja
ninja
样本输出:
-- The CXX compiler identification is GNU 10.2.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Conan: Adjusting output directories
-- Conan: Using cmake global configuration
-- Conan: Adjusting default RPATHs Conan policies
-- Conan: Adjusting language standard
-- Current conanbuildinfo.cmake directory: /home/thor/build
-- Conan: Compiler GCC>=5, checking major version 10
-- Conan: Checking correct version: 10
-- Configuring done
-- Generating done
-- Build files have been written to: /home/thor/build
thor@debian:~/build$ ninja
[2/2] Linking CXX executable bin/testConan
一旦过程完成,将在bin的构建文件夹中生成一个可执行文件:
cd bin
运行程序:
$ ./testConan
Opened SQLite database successfully!
使用Canon安装依赖项
Canon允许用户在使用conan install命令时安装依赖项。例如:
conan install .. --settings os="Linux" --settings compiler="gcc"
上述命令:
检查本地缓存中是否存在包配方(用于sqlite3/3.38.1或指定的包)。如果我们刚刚开始,缓存是空的。
在定义的遥控器中查找包配方。Canon的默认设置是conancenter remote,但可以更改。
如果配方存在,Canon客户端将获取并存储在本地Canon缓存中。
使用包配方和输入设置(Linux、GCC),Canon在本地缓存中查找相应的二进制文件。
由于在缓存中找不到二进制文件,Canon在遥控器中查找并取出它。
最后,它为[generators]部分中指定的构建系统生成一个适当的文件。
如果您希望使用以下命令重用可用的依赖项,也可以查看这些依赖项:
$ conan search "*"
Existing package recipes:
sqlite3/3.38.1
zlib/1.2.11
openssl/1.0.2t
要搜索包,请使用命令conan search、包和remote repo:
$ conan search poco* --remote=conancenter
Existing package recipes:
poco/1.8.1
poco/1.9.3
poco/1.9.4
poco/1.10.0
poco/1.10.1
poco/1.11.0
poco/1.11.1
您可以使用以下命令检查系统上的现有软件包:
$ conan search sqlite3/3.38.1@
返回的信息如下截图:
获取有关项目的信息:
$ conan info ..
返回的信息如下截图:
使用Canon时获得帮助:
$ conan --help
返回的信息如下截图:
注:关于Conan命令,请键入“conan <command> -h”获取帮助。