Xmake は、Lua をベースにした軽量のクロスプラットフォーム ビルド ツールです。
Lua ランタイムが組み込まれているため、非常に軽量で依存関係がありません。
xmake.lua を使用してプロジェクトの構築を維持します。makefile/CMakeLists.txt と比較して、設定構文はより簡潔かつ直感的です。初心者に非常に優しいです。短時間ですぐに開始できるため、ユーザーはより集中できます。実際のプロジェクト開発は優れています。
これを使用して、Make/Ninja などのプロジェクトを直接コンパイルしたり、CMake/Meson などのプロジェクト ファイルを生成したりできます。また、ユーザーが C/C++ 依存ライブラリの統合使用の問題を解決するのに役立つ組み込みのパッケージ管理システムも備えています。
現在、Xmake は主に C/C++ プロジェクトのビルドに使用されていますが、他のネイティブ言語の構築もサポートしており、C/C++ との混合コンパイルを実現でき、コンパイル速度も非常に速く、同等です。忍者の。
Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache
あまり正確ではありませんが、Xmake は次のように理解できます。
Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache
新機能の紹介
Windows の長いパスの問題の改善
Windows の長いパスの制限は常に大きな問題であり、ネスト レベルが深すぎるプロジェクトはファイルの読み取りおよび書き込み時に失敗する可能性があり、xmake の使いやすさとエクスペリエンスに影響を与えます。
xmake はこの問題を回避するためにさまざまな対策を提供していますが、依然としていくつかの制限を受けることがあります。このバージョンでは、インストーラーが改良され、ユーザーが長いパスのサポートを選択的に有効にできるインストール オプションが提供されました。
レジストリに書き込む必要があるため、管理者権限が必要です。
WriteRegDWORD ${HKLM} "SYSTEM\CurrentControlSet\Control\FileSystem" "LongPathsEnabled" 1
ユーザーはこれを有効にするかどうかを決定できます。
@A2va の貢献に感謝します。
zypper パッケージ マネージャーのサポート
OpenSUSE の zypper パッケージ マネージャーのサポートが追加されました。これは、zypper を介して自動的にダウンロードして直接インストールし、提供されるパッケージを統合できます。
@iphelf の貢献に感謝します。
add_requires("zypper::libsfml2 2.5")
msbuild パッケージのインストールを改善する
一部のサードパーティ パッケージは cmake によって管理されず、vcproj プロジェクト ファイルのみを提供するため、パッケージ化する場合はモジュールを使用してコンパイルおよびインストールする必要があります。 tools.msbuild
ただし、vcproj の vs バージョンが非常に古い場合は、アップグレードする必要があります。そうしないと、コンパイルが失敗します。
そこで、tools.msbuild モジュールを改良して、vcproj を自動的にアップグレードする機能を提供し、アップグレードが必要な vcproj/sln ファイルを指定するだけで済みます。
package("test")
on_install(function (package)
import("package.tools.msbuild").build(package, configs, {upgrade={"wolfssl64.sln", "wolfssl.vcxproj"}})
end)
grpc をサポートするために protobuf を改善
protobuf のサポートが改善され、同時に grpc_cpp_plugin をサポートできるようになりました。
add_rules("mode.debug", "mode.release")
add_requires("protobuf-cpp")
add_requires("grpc", {system = false})
target("test")
set_kind("binary")
set_languages("c++17")
add_packages("protobuf-cpp")
add_packages("grpc")
add_rules("protobuf.cpp")
add_files("src/*.cpp")
add_files("src/test.proto", {proto_rootdir = "src", proto_grpc_cpp_plugin = true})
add_files("src/subdir/test2.proto", {proto_rootdir = "src"})
完全な例については、protobuf_grpc_cpp_pluginを参照してください。
add_links サポート ライブラリ パス
通常、リンカーが指定されたディレクトリでライブラリ ファイルを検索できるようにするには、add_links を add_linkdirs と組み合わせて使用する必要があります。
ただし、構成が間違っていたり、ライブラリが異なるパスに同じ名前を持っていたりすると、間違ったライブラリ ファイルが簡単に見つかることがあります。add_links は、暗黙的な検索を回避するためにライブラリ ファイル パスの直接設定をサポートできるようになりました。
so/a ライブラリに対して明示的にリンクするために使用することもできます。
次の書き込み方法がサポートされています。
add_links("foo")
add_links("libfoo.a")
add_links("libfoo.so")
add_links("/tmp/libfoo.a")
add_links("/tmp/libfoo.so")
add_links("foo.lib")
Objc/Objc++ ヘッダー ファイルのプリコンパイルのサポート
以前のバージョンでは、C++ ヘッダー ファイルを使用してプリコンパイルすると、同時に objc コードに影響を与えていました。 set_pcxxheader
したがって、C++/ObjC++ コードを混合してコンパイルし、プリコンパイルされたヘッダーを使用すると、コンパイルの問題が発生します。
Objective-C was disabled in PCH file but is currently enabled
これは、プリコンパイル済みヘッダーのコンパイルでも言語を指定する必要があり、pch ファイルを混在させることができないためです。 -x c++-header
-x objective-c++-header
したがって、 C/C++ プリコンパイル済みヘッダーと競合しないように、objc/objc++ プリコンパイル済みヘッダー ファイルを個別に設定するインターフェイスを追加しました。 set_pmheader
set_pmxxheader
でも使い方は全く同じです。
target("test")
set_pmxxheader("header.h")
完全な例については、「Objc プリコンパイル済みヘッダーの例」を参照してください。
コナン 2.0 サポートの改善
前バージョンでは、当初はConan2.0に対応していましたが、細かい問題がいくつかあり、今バージョンではvs_runtimeの設定を改善するなど改善を続けてきました。
lua ランタイムを更新する
最近、Lua はバージョン 5.4.6 をリリースしました。また、アップストリームと歩調を合わせるために、xmake の組み込み Lua ランタイムもアップグレードしました。
更新ログ
新機能
- #3821 : Windows インストーラーは長いパスのサポート オプションを追加します
- #3828 : zypper パッケージ マネージャーのサポートを追加
- #3871 : vsproj の自動アップグレードをサポートするために tools.msbuild を改善します
- #3148 : protobuf サポート grpc を改善
- #3889 : add_links はライブラリ パスの追加をサポートします
- #3912 : objc プリコンパイル済みヘッダーをサポートするために set_pmxxheader を追加
- add_links サポート ライブラリ ファイル パス
向上
- #3752 : Windows での os.getenvs のフェッチを改善します
- #3371 : ninja を使用した wasm パッケージの構築をサポートするために tools.cmake を改善します
- #3777 : pkg-config からのパッケージの検索を改善します
- #3815 : Windows プラットフォーム用のツールチェーンを渡すために tools.xmake サポートを改善します
- #3857 :compile_commands.json の生成を改善する
- #3892 : パッケージ検索を改善し、説明からのパッケージの検索をサポートします
- #3916 : 迅速なプログラムの構築を改善し、モジュール間のシンボル呼び出しをサポートします
- lua ランタイムを 5.4.6 に更新する