xmake v2.3.6がリリースされ、Fortranコンパイルのサポートが追加されました

このバージョンは、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依存関係パッケージを統合するためのダブパッケージマネージャーのサポート

改善する

  • #868:新しいcl.exeヘッダーファイルのサポートは、出力ファイル形式によって異なります。/sourceDependencies xxx.json
  • #902:クロスコンパイルツールチェーンを改善する

https://tboox.org/cn/2020/07/28/xmake-update-v2.3.6/

おすすめ

転載: blog.csdn.net/waruqi/article/details/107655003