このバージョンは、Fortranコンパイルのサポート、zig言語の実験的なサポートの追加、サードパーティの依存関係パッケージのサポートとgolang / dlangのクロスコンパイルのサポートの追加など、他の言語のサポートにいくつかの改善を加えることに重点を置いています。
xmakeはc / c ++のビルドサポートに焦点を当てていますが、他の言語のサポートも時々いくつかの改善を行います。その主な目的は、公式のビルドシステムを置き換えることではなく、混合コンパイルをサポートすることだけです。 c / c ++。、c / c ++プロジェクトにより良いサービスを提供するため。
結局のところ、一部のc / c ++プロジェクトでは、cuda、dlang、objcなどの言語との混合呼び出しなど、他の言語のコードインターフェイスが呼び出されることがあります。 、swift、asmなど、xmakeは引き続きそれらの基本的なコンパイルサポートを行います。
さらに、c / c ++に関しては、vsプレビューバージョンの新しい/sourceDependencies xxx.json
出力ヘッダーファイル依存関係形式もサポートしています(これは、複数の言語でのヘッダーファイル依存関係の検出に対してより信頼性が高く安定しています)。
新機能の紹介
Fortran言語コンパイルのサポート
このバージョンから、Fortranプロジェクトをコンパイルするためのgfortranコンパイラの使用を完全にサポートしました。次のコマンドを使用して、Fortranに基づいて空のプロジェクトをすばやく作成できます。
$ xmake create -l fortran -t console test
そのxmake.luaの内容は次のとおりです。
add_rules("mode.debug", "mode.release")
target("test")
set_kind("binary")
add_files("src/*.f90")
その他のコード例はここで見ることができます:Fortranの例
Zig言語の実験的サポート
注:現在、この言語xmakeはまだ実験的なサポート段階にあり、完全ではありません。たとえば、Windowsではサポートされておらず、linux / macOSでのダイナミックライブラリコンパイルはまだサポートされていません。評価して使用してください。あなた自身。
次の構成方法を使用して試してみることができます。少なくとも、linux / macOSでのコンソールおよび静的ライブラリプログラムは引き続き実行できます。
add_rules("mode.debug", "mode.release")
target("test")
set_kind("binary")
add_files("src/*.zig")
Windowsがそれをサポートしない理由については、先にジグザグに述べた問題、#5825を参照してください。
いくつかの落とし穴があるため、ダイナミックライブラリはそれをサポートしていません(ジグによって生成されたダイナミックライブラリは自動的に追加されます.0.0.0
)。詳細については、問題5827を参照してください。
また、他のピットにも横になっていますが、個人的にはピットが多い気がするので、とりあえず実験段階ですので、後で見ていきます。
その他の例については、「ジグの例」を参照してください。
Goの依存関係パッケージとクロスコンパイルのサポート
新しいバージョンのxmakeは、goのクロスコンパイルなど、goビルドのサポートに引き続きいくつかの改善を加えています。たとえば、macOSとlinuxでWindowsプログラムをコンパイルできます。
$ xmake f -p windows -a x86
さらに、新しいバージョンでは、goのサードパーティの依存関係パッケージ管理の予備サポートも提供されます。
add_rules("mode.debug", "mode.release")
add_requires("go::github.com/sirupsen/logrus", {alias = "logrus"})
add_requires("go::golang.org/x/sys/internal/unsafeheader", {alias = "unsafeheader"})
if is_plat("windows") then
add_requires("go::golang.org/x/sys/windows", {alias = "syshost"})
else
add_requires("go::golang.org/x/sys/unix", {alias = "syshost"})
end
target("test")
set_kind("binary")
add_files("src/*.go")
add_packages("logrus", "syshost", "unsafeheader")
ただし、まだいくつかの欠点があります。たとえば、現在、すべてのカスケード依存関係パッケージを手動で構成する必要がありますが、これはもう少し面倒であり、将来的に改善する必要があります。
その他の例については、「Goの例」を参照してください。
Dlang / Dub依存関係パッケージのサポート
xmakeは、dlangのダブパッケージ管理もサポートしています。これにより、dlangのサードパーティの依存関係パッケージをすばやく統合できます。
add_rules("mode.debug", "mode.release")
add_requires("dub::log 0.4.3", {alias = "log"})
add_requires("dub::dateparser", {alias = "dateparser"})
add_requires("dub::emsi_containers", {alias = "emsi_containers"})
add_requires("dub::stdx-allocator", {alias = "stdx-allocator"})
add_requires("dub::mir-core", {alias = "mir-core"})
target("test")
set_kind("binary")
add_files("src/*.d")
add_packages("log", "dateparser", "emsi_containers", "stdx-allocator", "mir-core")
cl.exe新しいヘッダーファイルに依存するファイルのサポート
msvcのヘッダーファイルは/showIncludes
、通常は解析する必要のある出力コンテンツに依存し、依存関係のコンパイルの問題に対処するために内部のインクルードファイルリストが抽出されますが、cl.exeはこの出力の非常に悪い仕事をし、インクルード情報とコンパイル出力は混合されます。
特に多言語環境では、依存関係分析を処理するツールを構築するのは非常に不親切です。判断方法は含まれています。前のNote: including file:
文字列で抽出を判断する必要がありますが、中国語では注意: 包含文件:
、に
変更された場合はそうです。日本語、それは日本語のプレフィックス文字列にもあり、エンコーディング形式の問題、およびハードコーディングの問題は解析と処理につながりますが、とにかく完璧ではありません。
この点に関して、最新のvs2019プレビューバージョンでは、Microsoftはついに配置を改善しました。新しい/sourceDependencies xxx.json
コンパイルオプションにより、インクルードの依存関係情報をより適切に出力できるため、多言語環境での分析と抽出に便利です。
さらに、この新しいオプションの出力は、個別のjsonファイルから独立しており、最終的にコンパイル出力と混合されません。また、最終的に、コンパイルエラー、警告メッセージ、およびリスト情報を解析して分離する必要はありません。
出力コンテンツは次のようになります。
{
"Version": "1.0",
"Data": {
"Source": "z:\\personal\\tbox\\src\\tbox\\tbox.c",
"Includes": [
"z:\\personal\\tbox\\src\\tbox\\tbox.h",
"z:\\personal\\tbox\\src\\tbox\\prefix.h",
"z:\\personal\\tbox\\src\\tbox\\prefix\\prefix.h",
"z:\\personal\\tbox\\src\\tbox\\prefix\\config.h",
"z:\\personal\\tbox\\src\\tbox\\config.h",
...
新しいバージョンでは、xmakecore.base.json
は新しい組み込みモジュールを追加することでjsonの解析を処理します。これにより、新しいヘッダーファイルに依存するデータの解析とサポートが簡単になります。このモードが推奨されます(clが新しいバージョンでサポートされている場合は、古いバージョンclのはまだ使用されています/showIncludes
)。
Xcodeプラグイン生成のサポート
現在、xcodeプロジェクトの生成を自分で実装する時間はありませんが、xmakeはcmakelists.txtファイルの生成をサポートし、cmakeはxcodeプロジェクトファイルの生成をサポートしているため、サポートされていないという意味ではありません。公式の実装で
は、cmakeがそれを偽装してサポートすることもできます。xmakeは自動的に内部でcmakeを呼び出して、生成された結果を転送します。ユーザーの使用法に違いはありません。cmakeがインストールされていることを確認してください。
$ xmake project -k xcode
!>時間が経過したら、より完全なxcode出力プラグインをそれぞれ再実装し、貢献してくれるすべての人を歓迎します。
xmake-vscodeプラグインのインテリセンスサポート
最近、現在のプロジェクトのディレクトリに自動的に生成されるxmake-vscodeプラグインも更新しました。その後、このパスを関連付けてインテリセンスの自動プロンプトを実現し、構成を同期するように構成するだけで済みます。 xmake.luaのincludedirsなどの情報。compile_commands.json
.vscode
.vscode/c_cpp_properties.json
.vscode/compile_commands.json
生成方法についてc_cpp_properties
は、公式ドキュメントに詳細な手順があります:https://code.visualstudio.com/docs/cpp/configure-intellisense-crosscompilation
内部の主な構成項目:
"configurations": [
{
"compileCommands": ".vscode/compile_commands.json",
}
],
コンテンツを更新する
新機能
- xcodeプロジェクトジェネレータプラグインを追加します
xmake project -k cmake
(現在はcmakeによって生成されています) - #870:gfortranコンパイラをサポート
- #887:ジグコンパイラをサポート
- #893:jsonモジュールを追加
- #898:golangプロジェクトの構築を改善し、クロスコンパイルをサポートします
- #275:サードパーティのgo依存関係パッケージを統合するためのgoパッケージマネージャーのサポート
- #581:サードパーティのdlang依存関係パッケージを統合するためのダブパッケージマネージャーのサポート