xmake的基本使用(二)
xmake的基本使用(一)-- 构建项目
xmake的基本使用(二)-- 导入第三方开源库
xmake的基本使用(三)-- 添加自己写的库至仓库
文章目录
前言
C/C++语言有着速度快和效率高等优势,但是一般在构建自己的项目时用到的Cake让新手难以适应其规则。另外在导入第三方开源库时,更加麻烦。
本文介绍了使用第三方开源工具xmake的包管理器xrepo导入第三方库时的一些基本操作。
提示:以下是本篇文章正文内容,下面案例可供参考
一、xmake和xrepo介绍?
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比
makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
xrepo 是一个基于 xmake 的跨平台 C/C++ 包管理器。它基于 xmake 提供的运行时,但却是一个完整独立的包管理程序,相比 vcpkg/homebrew 此类包管理器,xrepo 能够同时提供更多平台和架构的
C/C++ 包。 Markdown将文本转换为 HTML。
提示:xrepo的安装参考
xrepo官网
二、使用xrepo内置库
1. 安装库
这里以 Eigen 线性方程组库为例
1). 使用命令行安装
xrepo install eigen
安装好提示 install eigen 3.4.0 …ok
xrepo install 安装的包默认为最新版本。
如果想安装固定版本那么加上版本号限制。假设我想安装Eigen的历史版本3.3.8
xrepo install "eigen 3.3.8"
当然可以给定一个版本最低要求
xrepo install "eigen >=3.3.8"
2). 在项目中自动安装
在项目中自动安装只需在项目的根目录的xmake.lua配置文件中添加以下代码即可。
add_requires("eigen")
假设要求使用3.3.7版本,用
add_requires("eigen 3.3.7")
下图为add_requires(“eigen”)的工作原理
假设没有下载就下载安装,安装成功后查找包的位置,并集成到项目中。图片来源于xrepo官网
此时我们只需要在target作用域范围内加入
add_packages("eigen")
就可以在源文件中使用eigen库了。
xmake.lua 文件详细代码如下:
add_rules("mode.debug", "mode.release")
add_requires("eigen")
target("ntl_test")
add_packages("eigen")
set_kind("binary")
add_files("src/*.cpp")
main.cpp文件如下
#include <iostream>
#include <Eigen/Dense> //导入Eigen的密集矩阵头文件
using namespace std;
int main(int argc, char** argv)
{
// 定义及初始化
Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic> a(2, 2);
a(0, 0) = 1;
a(0, 1) = 2;
a(1, 0) = 3;
a(1, 1) = 4;
a.setOnes();
cout << a << endl;
cout << "hello world!" << endl;
return 0;
}
运行结果为:
1 1
1 1
hello world!
(*注: 在add_requires(“eigen”) 之后就可以add_packages(“eigen”)这样当前xmake.lua文件中的所有目标都可以使用 eigen库)
2. 安装指定类型库
因为eigen为一个仅头文件的模板库,这里以zlib库举例
xrepo install -m debug zlib --安装debug版本库
xrepo install -k shared zlib --安装release版本库
同样我们可以安装指定平台包
xrepo install -p iphoneos -a arm64 zlib
xrepo install -p android [--ndk=/xxx] zlib
xrepo install -p mingw [--mingw=/xxx] zlib
xrepo install -p cross --sdk=/xxx/arm-linux-musleabi-cross zlib
3. 安装其他第三方包管理器的包
xmake目前支持homebrew,vcpkg,conan,pacman,clib等等。
安装此类包时只需在项目中的xmake.lua中更改代码如下(以eigen、zlib为例):
add_requires("eigen", {alias = "eigen"})
->
add_requires("vcpkg::eigen", {alias = "eigen"})
--{alias = "eigen"}这个是将此库名称的别名改为eigen,就不需要添加vcpkg,仅在当前xmake.lua中有效
add_requires("zlib", {alias = "zlib"})
->
add_requires("brew::zlib", {alias = "zlib"})
--{alias = "zlib"}这个是将此库名称改为zlib,就不需要添加brew,仅在当前xmake.lua中有效
4. 查找包信息
使用xrepo fetch 包名即可获取包的头文件、库文件、版本等信息。
举例:
xrepo fetch eigen
显示结果为:
(base) PS F:\Codes\xmake\eigen_test> xrepo fetch eigen
{
{
includedirs = {
"C:\Users\wxz\AppData\Local\.xmake\packages\e\eigen\3.4.0\1af8f25c61b04e19afd2699bba8d04c0\include",
"C:\Users\wxz\AppData\Local\.xmake\packages\e\eigen\3.4.0\1af8f25c61b04e19afd2699bba8d04c0\include\eigen3"
},
version = "3.4.0",
license = "MPL-2.0"
}
}
xrepo fetch zlib
显示结果为:
(base) PS F:\Codes\xmake\eigen_test> xrepo fetch zlib
{
{
version = "1.2.13",
links = {
"zlib"
},
includedirs = {
"C:/VCPKG/vcpkg/installed/x64-windows-static/include"
},
linkdirs = {
"C:/VCPKG/vcpkg/installed/x64-windows-static/lib"
}
}
}
三、总结
以上就是本文讲的内容,涉及了xmake安装和使用第三方库。