xmake は、Luaをベースにした軽量のクロスプラットフォームビルドツールです。xmake.luaを使用してプロジェクトビルドを維持します。makefile/ CMakeLists.txtと比較して、構成構文はより簡潔で直感的です。初心者にとって非常に使いやすいです。短時間ですぐに開始できます。ユーザーが実際のプロジェクト開発にもっと集中できるようにします。
この新しいバージョンでは、xmakeの依存関係パッケージ管理の改善に重点を置き、ArchlinuxおよびMSYS2 / Mingwでのpacmanパッケージマネージャーのサポートを追加し、xmakeの公式パッケージリポジトリxmake-repoをさらに強化し て50を追加しました。一般的に使用されるいくつかのC / C ++パッケージ。
さらに、xmakeに基づく新しい独立したサブコマンドxrepoを追加しました。これは、完全で独立したクロスプラットフォームC / C ++パッケージマネージャーであり、ユーザーが毎日のC / C ++パッケージのインストールと統合使用を簡単に管理できるようにします。
同時に、xrepo関連サイトxrepo.xmake.ioも立ち上げました。このサイト では、xrepoの使用状況、および公式のxmake-repoリポジトリ内の各パッケージのサポートと使用状況をすばやく確認できます。
新機能の紹介
Xrepoパッケージマネージャー
xrepoは、Xmakeに基づく クロスプラットフォームのC / C ++パッケージマネージャーです。
xmakeが提供するランタイムに基づいていますが、完全で独立したパッケージ管理プログラムです。vcpkg/ homebrewなどのパッケージマネージャーと比較して、xrepoはより多くのプラットフォームとアーキテクチャに同時にC / C ++パッケージを提供できます。
マルチバージョンのセマンティック選択もサポートします。また、分散型分散ウェアハウスです。公式のxmake-repo ウェアハウスを提供するだけでなく 、ユーザーが複数のプライベートウェアハウスを構築することもサポートします。
同時に、xrepoは、vcpkg / homebrew / conanなどのサードパーティパッケージマネージャーからのパッケージのインストールもサポートし、サードパーティプロジェクトとの統合とドッキングを容易にするための統一された一貫性のあるライブラリリンク情報を提供します。
詳細については、オンラインドキュメント、 Github および Giteeを参照してください。
インストール
xrepoコマンドを使用するには、xmakeをインストールするだけで済みます。xmakeのインストールについては、xmakeインストールドキュメントを参照してください。
サポートプラットフォーム
- Windows(x86、x64)
- macOS(i386、x86_64、arm64)
- Linux(i386、x86_64、クロスツールチェーン..)
- * BSD(i386、x86_64)
- Android(x86、x86_64、armeabi、armeabi-v7a、arm64-v8a)
- iOS(armv7、armv7s、arm64、i386、x86_64)
- MSYS(i386、x86_64)
- MinGW(i386、x86_64、arm、arm64)
- クロスツールチェーン
サポートされているパッケージ管理ウェアハウス
- 公式の自作倉庫 xmake-repo (tbox > 1.6.1)
- ユーザーが作成した倉庫
- コナン(conan :: openssl / 1.1.1g)
- Vcpkg(vcpkg:ffmpeg)
- Homebrew / Linuxbrew(brew :: pcre2 / libpcre2-8)
- archlinux / msys2上のパックマン(pacman :: libcurl)
- タグ(clib :: clibs / bytes @ 0.0.4)
- ダブ(dub :: log 0.4.3)
分散倉庫サポート
公式リポジトリxmake-repoから インストールパッケージを直接取得することに加えて、任意の数の自己構築リポジトリを追加し、外部ネットワークを完全に分離して、会社の内部ネットワークでのプライベートパッケージのインストールと統合のみを維持することもできます。
次のコマンドを使用して、独自のウェアハウスアドレスを追加するだけです。
$ xrepo add-repo myrepo https://github.com/mygroup/myrepo
C / C ++パッケージを個別にインストールする
さまざまなインストール方法が利用可能で、セマンティックバージョン、デバッグパッケージ、動的ライブラリ、構成可能なパラメーター、およびさまざまなサードパーティパッケージ管理でのC / C ++パッケージのインストールをサポートします。
$ xrepo install zlib tbox
$ xrepo install "zlib 1.2.x"
$ xrepo install "zlib >=1.2.0"
$ 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
$ xrepo install -m debug zlib
$ xrepo install -k shared zlib
$ xrepo install -f "vs_runtime=MD" zlib
$ xrepo install -f "regex=true,thread=true" boost
$ xrepo install brew::zlib
$ xrepo install vcpkg::zlib
$ xrepo install conan::zlib/1.2.11
$ xrepo install pacman:libpng
$ xrepo install dub:log
xmakeエンジニアリングとのシームレスな統合
add_requires("tbox >1.6.1", "libuv master", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8")
add_requires("conan::openssl/1.1.1g", {alias = "openssl", optional = true, debug = true})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("tbox", "libuv", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8", "openssl")
以下は、xmakeと統合された全体的なアーキテクチャとコンパイルプロセスです。
xrepoの使用方法の詳細については、ドキュメント「Xrepoクイックスタート」を参照してください。
クロスコンパイルされた依存関係パッケージのインストールをサポートする
新しいバージョンでは、xmake内の依存関係パッケージのインストールメカニズムが改善され、クロスコンパイルツールチェーンのC / C ++依存関係パッケージのインストールサポートが追加されました。次に例を示します。
add_requires("zlib", "openssl")
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("zlib", "openssl")
上記の2つの依存関係パッケージを構成しました:zlib、openssl、次にクロスコンパイル環境に切り替え、musl.ccのコンパイルツールチェーンを使用してコンパイルします。
$ xmake f -p cross --sdk=/tmp/arm-linux-musleabi-cross
in xmake-repo:
-> openssl 1.1.1h
please input: y (y/n)
=> http://zlib.net/zlib-1.2.11.tar.gz .. ok
=> download https://github.com/openssl/openssl/archive/OpenSSL_1_1_1h.zip .. ok
=> installing zlib .. ok
=> installing openssl .. ok
$ xmake
[ 50%]: ccache compiling.release src/main.cpp
[ 75%]: linking.release test
[100%]: build ok!
xmakeは自動的にzlib / opensslソースコードパッケージをプルし、arm-linux-musleabi-cross
クロスツールチェーンを使用して zlibとopensslをコンパイルしてインストールします。インストールが完了すると、テストプロジェクトに自動的に統合され、完全にコンパイルされるまでリンクに参加します。
もちろん、C / C ++でクロスコンパイルをサポートするには、最初に公式のxmake-repoリポジトリを維持し、クロスコンパイルのサポートを追加する必要があります。現在、ウェアハウスでのクロスオーバーをサポートするC / C ++パッケージは多くありませんが、多くはすでに含まれており、今後も拡張されていきます。
クロスコンパイルをサポートするパッケージを確認する場合は、パッケージウェアハウスサイトに直接アクセスして、クロスコンパイルをサポートするC / C ++パッケージリストを表示できます。
新しいバージョンで提供されているxrepoコマンドを使用して、指定されたプラットフォームでサポートされているパッケージを直接取得することもできます(ファジークエリをサポート)。
$ xrepo search -p cross zli*
また、 公式のxmake-repoリポジトリにさらに多くのパッケージを提供し、C / C ++パッケージ管理エコシステムの構築を改善するために協力して、ユーザーがさまざまな依存パッケージをより便利に使用できるようにし、さまざまな面倒な移植タスクに関与する必要がなくなるようにすることを歓迎します 。困った。
依存パッケージライセンス検出メカニズム
ウェアハウス内のパッケージのそれぞれのライセンスが異なることを考慮すると、一部のパッケージは使用後にユーザープロジェクトのライセンスと競合する可能性があるため、xmakeは新しいバージョンにパッケージ依存性ライセンス互換性検出メカニズムを追加します。
また、新しいset_license
インターフェイスが追加され、ユーザーが各ターゲットのライセンスを設定できるようになりました 。
たとえば、LGPL-2.0パッケージのlibplistライブラリを統合しましたが、プロジェクトにはライセンス設定がありません。
add_requires("libplist") -- LGPL-2.0
target("test")
set_kind("binary")
add_files("src/*.cpp")
add_packages("libplist")
コンパイル時に、libplistを使用すると、コードライセンスの競合のリスクがある可能性があることをユーザーに警告する次のプロンプトが表示されます。
$ xmake
warning: target(test) maybe is not compatible with license(LGPL-2.1) of package(libplist),
we can use shared libraries with LGPL-2.1 or use set_license()/set_policy() to modify/disable license!
また、set_license("LGPL-2.0")
完全な互換性を確保するためにプロジェクトを明示的に渡す場合 、警告メッセージは表示されず、 GPL
関連するライセンスの場合、xmakeにも対応する検出があります。
MITやBSDなどの比較的緩いライセンスパッケージは直接統合され、警告なしに使用されます。
さらにset_license()
、パッケージとのライセンスの競合を明示的に設定した場合 も、警告が表示されます。
Pacmanパッケージソースのサポート
以前のバージョンでは、xmakeはvcpkg、conan、clib、homebrewなどのサードパーティのウェアハウスパッケージソースの自動統合をすでにサポートしています。新しいバージョンでは、pacmanによって管理されるパッケージの統合のサポートが追加されました。
archlinuxでのpacman パッケージのインストールと統合、およびmsys2でのmpmanのmingw x86_64
/i386
パッケージのインストールと統合の両方をサポートします 。
add_requires("pacman::zlib", {alias = "zlib"})
add_requires("pacman::libpng", {alias = "libpng"})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("zlib", "libpng")
archlinuxの場合のみ:
xmake
msys2にmingwパッケージをインストールするには、mingwプラットフォームを指定する必要があります。
xmake f -p mingw -a [x86_64|i386]
xmake
パッケージの任意のバージョンの必須インストール
xmake-repoウェアハウス内のパッケージには、厳密なバージョンリストと、ダウンロードの整合性チェックに対応するsha256値があるため、これにより、パッケージダウンロードの信頼性と整合性が保証されます。
ただし、パッケージのすべてのバージョンを完全に含めることもできなくなります。含まれていない必要なバージョンがある場合、1つの方法は、ユーザーがprをxmake-repoリポジトリに追加して、対応するバージョンのサポートを増やすことです。
もう1つの方法は、xmake.lua{verify = false}
で必須のスキップ検証メカニズムを構成して 、パッケージの任意のバージョンをダウンロードすることを選択できるようにすることです。
add_requires("libcurl 7.73.0", {verify = false})
vcpkgパッケージ統合の改善
vcpkgパッケージの依存関係の統合に関して、新しいバージョンで多くの改善が行われました。windows-static-mdパッケージのスイッチサポートが追加されただけでなく、vcpkgコマンドの自動検出メカニズムも改善され、より多くのシナリオで可能になりました。手動で構成する代わりに、自動的に検出できます。
カスタムクロスツールチェーンの改善
新しいバージョンでは、自動検出をよりインテリジェントにするためにカスタムツールチェーンの改善を続けています。通常はsdkdirを指定するだけで、xmakeはクロスやその他の情報などの他の構成を自動的に検出できます。
toolchain("my_toolchain")
set_kind("standalone")
set_sdkdir("/tmp/arm-linux-musleabi-cross")
toolchain_end()
target("hello")
set_kind("binary")
add_files("apps/hello/*.c")
これは、最も合理化されたクロスツールチェーン構成の1つであり、対応するsdkパスを設定し、 set_kind("standalone")
それを完全に独立したツールチェーンとしてマークするだけです。
現時点では--toolchain=my_toolchain
、使用するコマンドラインからこのツールチェーンに手動で切り替えることができ ます。
xmake f --toolchain=my_toolchain
xmake
さらに、xmake.luaset_toolchains
の対応するターゲットに直接バインドすることもできます 。その場合、このターゲットがコンパイルされたときにのみ、カスタムツールチェーンに切り替えます。
toolchain("my_toolchain")
set_kind("standalone")
set_sdkdir("/tmp/arm-linux-musleabi-cross")
toolchain_end()
target("hello")
set_kind("binary")
add_files("apps/hello/*.c")
set_toolchains("my_toolchain")
このようにして、ツールチェーンを手動で切り替える必要がなくなり、xmakeを実行するだけで、デフォルトで自動的にmy_toolchainツールチェーンに切り替わります。
これは、組み込みプラットフォーム用のクロスコンパイルツールチェーンが多数あり、さまざまなプラットフォームのコンパイルを完了するためにさまざまなスイッチが必要になることが多いため、組み込み開発に特に役立ちます。
したがって、すべてのツールチェーン定義を別のluaファイルに配置して、次のように定義できます。
projectdir
- xmake.lua
- toolchains
- my_toolchain1.lua
- my_toolchain2.lua
- ...
次に、インクルードを介してxmake.luaにそれらを導入し、さまざまなカスタムプラットフォームに従ってさまざまなツールチェーンをバインドするだけです。
includes("toolchains/*.lua")
target("hello")
set_kind("binary")
add_files("apps/hello/*.c")
if is_plat("myplat1") then
set_toolchains("my_toolchain1")
elseif is_plat("myplat2") then
set_toolchains("my_toolchain2")
end
このようにして、コンパイル時に指定されたプラットフォームをすばやく直接切り替えて、対応するツールチェーンを自動的に切り替えることができます。
xmake f -p myplat1
xmake
一部のクロスコンパイルツールチェーンの構造が複雑で、自動検出だけでは不十分な場合は、実際の状況に応じて 、、 および その他のインターフェイスを使用し set_toolset
、 他の設定をターゲットに設定できます。set_cross
set_bindir
たとえば、次の例では、いくつかのcxflags / ldflagsと組み込みのシステムライブラリリンクも追加しました。
toolchain("my_toolchain")
set_kind("standalone")
set_sdkdir("/tmp/arm-linux-musleabi-cross")
on_load(function (toolchain)
-- add flags for arch
if toolchain:is_arch("arm") then
toolchain:add("cxflags", "-march=armv7-a", "-msoft-float", {force = true})
toolchain:add("ldflags", "-march=armv7-a", "-msoft-float", {force = true})
end
toolchain:add("ldflags", "--static", {force = true})
toolchain:add("syslinks", "gcc", "c")
end)
カスタムツールチェーンのその他の例については、xmakeのソースディレクトリにある組み込みのツールチェーン定義を参照してください。内部ツールチェーンリスト
メニュー設定はマウス操作をサポートします
xmakeはグラフィカルなターミナルメニュー構成も提供することを覚えていますか?これは、Linuxカーネルに似た古典的なメニュー構成のグラフィカル構成インターフェースです。
xmake f --menu
新バージョンでは、クロスプラットフォームのマウス操作を追加するなど、さらに改良を加えました。マウスを使用してさまざまな構成アイテムをクリックして選択できるため、より便利です。
コンテンツを更新する
新機能
- 新しいxrepo コマンドを追加して、 C / C ++パッケージを管理およびインストールします
- クロスコンパイルされた依存関係パッケージのインストールをサポートする
- musl.ccにツールチェーンのサポートを追加しました
- #1009:パッケージの任意のバージョンをインストールするための検証の無視をサポートします。
add_requires("libcurl 7.73.0", {verify = false})
- #1016:依存パッケージのライセンス互換性チェックを追加
- #1017:外部/システムヘッダーファイルのサポートをサポートし
add_sysincludedirs
、依存パッケージがデフォルトで使用されます-isystem
- #1020:archlinuxおよびmsys2でのpacmanパッケージの検索とインストールのサポート
xmake f --menu
メニュー構成を改善し 、マウス操作をサポート
改善する
- #997:
xmake project -k cmake
プラグインのset_languages
サポートを追加 - #998:windows-static-mdタイプのvcpkgパッケージのインストールをサポート
- #996:vcpkgディレクトリ検索を改善
- #1008:クロスコンパイルツールチェーンを改善する
- #1030:xcode.frameworkとxcode.applicationのルールを改善する
- #1051:msvcコンパイラに 情報フォーマットタイプを追加
edit
してembed
デバッグするset_symbols()
- #1062:
xmake project -k vs
プラグインを改善する