简单的 C/C++ 项目自动化构建--Xmake
Xmake 簡介
https://xmake.io/#/
XMake是一個基于Lua的輕量級跨平臺自動構建工具,支持在各種主流平臺上構建項目。
Xmake = Build backend + Project Generator + Package Manager
它跟cmake、automake、premake有點類似,但是機制不同,它默認不會去生成IDE相關的工程文件,采用直接編譯,并且更加的方便易用 采用lua的工程描述語法更簡潔直觀,支持在大部分常用平臺上進行構建,以及交叉編譯。
已經(jīng)有強大的cmake了,既生瑜何生亮,xmake好在哪?
相比 makefile/CMakeLists.txt,配置語法更加簡潔直觀,對新手非常友好。短時間內(nèi)就能快速入門,能夠讓用戶把更多的精力集中在實際的項目開發(fā)上。
能夠使用它像 Make/Ninja 那樣可以直接編譯項目,也可以像 CMake/Meson 那樣生成工程文件,另外它還有內(nèi)置的包管理系統(tǒng)來幫助用戶解決 C/C++ 依賴庫的集成使用問題。
目前,Xmake 主要用于 C/C++ 項目的構建,但是同時也支持其他 native 語言的構建,可以實現(xiàn)跟 C/C++ 進行混合編譯,同時編譯速度也是非常的快,可以跟 Ninja 持平。
xmake的理念:真正的一致維護, 真正的一鍵編譯。
構建行為的一致性: 不管你的項目是否有庫依賴,工具依賴,只需要執(zhí)行一個xmake命令,即可編譯通過。
項目維護的一致性: 不管你的項目是在windows上用,還是給linux, iphone, android上用,都只需要一份xmake.lua維護項目即可。
而cmake還需要生成額外的第三方IDE工程文件,即使cmakelist.txt相同,但是構建、維護體驗上對用戶來講都不可能保證完全一致,畢竟還受限于vc/make此類工具。
項目地址:
GitHub - xmake-io/xmake: 🔥 A cross-platform build utility based on Lua
增長趨勢圖,?比cmake簡單好用,有超越cmake之勢。它是一個國人開發(fā)的不斷維護發(fā)展壯大的項目,前景不錯。
下載安裝
windows下,安裝包地址:
https://github.com/xmake-io/xmake/releases
或者使用powershell
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content入門使用
創(chuàng)建項目
xmake也完全支持對Qt5項目的維護和構建。先舉一個簡單的入門例子:
創(chuàng)建一個名叫?hello?的c語言控制臺工程(-l選項指定語言,若是cpp則指定為-l c++):
-P 工程名(目錄名)
$xmake create -l c -P ./hello執(zhí)行完后,將會生成一個簡單工程結構:
?其中xmake.lua是工程描述文件,內(nèi)容非常簡單,告訴xmake添加src目錄下的所有.c源文件:
?構建項目
$xmake運行程序
$xmake run hello調(diào)試程序
$xmake run -d helloQT的項目創(chuàng)建
基于qt的項目,也是秒建。
舉例,創(chuàng)建一個帶qml的quickapp空工程,只需要敲如下命令:
$xmake create -t qt.quickapp testxmake會生成帶有xmake.lua的Qt項目,xmake.lua內(nèi)容也很簡單。?
會自動檢測你的qt本機安裝的環(huán)境,自動的找到。當然也可以指定:
$xmake f --qt=/home/xxx/qtsdk或者設置到全局路徑,避免每次編譯切換都要配置一遍:
$xmake g --qt=/home/xxx/qtsdk?除了源文件的添加,其他基本上都跟之前的可執(zhí)行程序項目沒什么不同,唯一的區(qū)別就是通過add_rules("qt.quickapp")這個內(nèi)置的Qt構建規(guī)則來代替set_kind("binary")。
其實qt.quickapp規(guī)則內(nèi)部最終還是設置了binary類型,只不過在此基礎上額外增加了一些只有Qt才需要的構建規(guī)則,比如:特定links,flags還有includedirs等。
運行下看看:
$xmake run運行和斷點調(diào)試
我們可以通過xmake run -d命令來加載gdb/lldb調(diào)試程序,或者搭配xmake-vscode插件的斷點調(diào)試支持,來開發(fā)和調(diào)試Qt程序。 這塊可以閱讀前文:xmake從入門到精通3:運行和調(diào)試目標程序
集成vcpkg包管理
$xmake f --vcpkg=F:\vcpkg比如加載以下庫,xmake.lua示例:
add_requires("vcpkg::zlib 1.2.11") target("test")add_files("src/*.c")add_packages("vcpkg::zlib")至于加載conan的庫,需要下載exe文件。安裝后,配置path路徑,然后就可以使用了如下:
add_requires("conan::poco/1.9.4", {alias = "poco", debug = true})添加代理
注意添加代理,這樣訪問github會快:
$xmake g --proxy_pac=github_mirror.lua關于包管理
關于包管理,雖然現(xiàn)在已經(jīng)有了homebrew, vcpkg等包管理工具來解決這一問題,但是多少都有一些局限性。
例如:
做過c、c++開發(fā)的朋友都會有找?guī)斓耐纯唷S袝r候要編譯一個庫,這個庫又依賴其他的庫,需要我們自己去搜索,下載,解壓,編譯安裝,不同的平臺編譯方法有差異,編譯好了又有可能發(fā)現(xiàn)需要的庫的版本和我們下的不一致,工作要重頭再來。
其他語言像java有maven對依賴的jar進行管理,像js有npm來做包管理,rust有cargo,主要這些語言要么背靠一個大公司,要么是一個獨立的公司在運作,所以包管理作的都比較不錯。
c或c++程序員就比較痛苦了,沒有統(tǒng)一的包管理,都沒有大規(guī)模流行起來,以至于很長時間我都不知道c、c++也有包管理器。后來發(fā)現(xiàn)c、c++ 也有些包管理器,比如微軟的Vpckg在visual studio下使用;conan 有可能成為事實標準的包管理器,配合cmake,應用還是比較廣泛。
關于conan ,conan這5年期間成長還是挺多的,現(xiàn)在可以用的庫也達到了八百多個,如果沒有的話,也可以很方便的自己寫一個,上傳到自己的私人包管理服務器里,C++開發(fā)終于有了cargo的感覺了。
xmake的包管理工具xrepo
使用舉例:
PS F:\ccode\test> xrepo search zlib The package names:zlib:-> chromium_zlib-2022.02.22: zlib from chromium (in xmake-repo)-> zlib-v1.2.11: A Massively Spiffy Yet Delicately Unobtrusive Compression Library (in xmake-repo)-> zlib-ng-2.0.5: zlib replacement with optimizations for next generation systems. (in xmake-repo) PS F:\ccode\test> xrepo install zlib note: install or modify (m) these packages (pass -y to skip confirm)? in xmake-repo:-> zlib v1.2.11 [vs_runtime:"MT"] please input: y (y/n/m) y=> install zlib v1.2.11 .. ok PS F:\ccode\test> xrepo list-repo global repositories:vcpkg https://github.com/microsoft/vcpkgconan https://github.com/conan-io/conan-center-indexbuild-artifacts https://gitee.com/xmake-mirror/build-artifacts.git mainxmake-repo https://gitee.com/tboox/xmake-repo.git masterbuiltin-repo D:\Program Files\xmake\repository5 repositories were found! PS F:\ccode\test> xrepo rm-repo conan remove global repository(conan): ok!在xmake.lua下寫就更簡單了,增加一句話就行:
add_requires("zlib 1.2.11")還可以用其他包管理器的包,比如:
add_requires("vcpkg::zlib 1.2.11") target("test")add_files("src/*.c")add_packages("vcpkg::zlib")build結果示例
舉例,xmake.lua中增加如下庫依賴:
add_requires("conan::poco/1.9.4", {alias = "poco", debug = true})build過程:
PS F:\ccode\test> xmake checking for Microsoft Visual Studio (x64) version ... 2019 note: install or modify (m) these packages (pass -y to skip confirm)? in conan:-> conan::poco/1.9.4 latest [debug:y, vs_runtime:"MT"] please input: y (y/n/m) y=> install conan::poco/1.9.4 latest .. ok [ 25%]: compiling.release src\main.c [ 50%]: linking.release test.exe [100%]: build ok!引用
c++基礎00-如何讓程序運行起來? - 知乎
十分鐘搞定 C/C++ 項目自動化構建 —— Xmake 入門指南_藍橋云課的博客-CSDN博客
xmake · 音視頻/C++/k8s/Docker等等 學習筆記 · 看云
xmake自動構建工具 - 簡書
TBOOX開源工程
XMake 快速開始_w3cschool
xmake
xmake v2.2.2, 讓C/C++擁有包依賴自動構建_waruqi的博客-CSDN博客
xmake從入門到精通6:開發(fā)和構建Qt程序 - 知乎
如何評價 xmake? - 知乎
xmake入門,構建項目原來可以如此簡單_waruqi的博客-CSDN博客_xmake
總結
以上是生活随笔為你收集整理的简单的 C/C++ 项目自动化构建--Xmake的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中地恒达无线倾角加速度计
- 下一篇: PHP浏览器语言