xmake v2.2.9発表、c++20 modulesの実験的サポートを追加

7281 ワード

このバージョンはあまり新しい特性はなく、主にc++20 modulesを実験的にサポートしており、現在clang/msvcコンパイラをサポートしているほか、多くの使用体験を改善し、安定性を高めています.
また、このバージョンにはsocketが追加されました.ioサポートおよび対応するコラボレーションioのスケジューリングサポートは、次のバージョンのリモートコンパイル、および後続の分散コンパイルの準備を行います.
  • プロジェクトソース
  • 公式ドキュメント

  • 新しいプロパティの紹介
    c++20 modules
    c++modulesはすでに正式にc++20草案に組み込まれており、msvcとclangもmodules-tsのサポートを基本的に実現しており、c++20の足どりが私たちに近づくにつれて、xmakeもc++modulesを事前にサポートし始めた.
    現在、xmakeはmsvc/clangのmodules-ts構築の実現を完全にサポートしているが、gccについては、そのcxx-modules分岐がまだ開発中であり、masterに正式に入っていないため、中のchangelogを見てみると、関連flagsはまだ変動し続けており、まだ安定していないような気がするので、ここではしばらくサポートしていない.
    xmakeのc++modulesに関する進展について:https://github.com/xmake-io/xmake/pull/569
    Hello Module
    c++modulesに関する紹介は多くありませんが、ここでは主にxmakeの下でc++modulesプロジェクトを構築する方法を紹介します.まず簡単な例を見てみましょう.
    target("hello")
        set_kind("binary")
        add_files("src/*.cpp", "src/*.mpp") 

    c++modulesファイルの構築をサポートするxmakeです.luaは、hello.mppがモジュールファイルであることを説明する.
    #include 
    export module hello;
    using namespace std;
    
    export namespace hello {
        void say(const char* str) {
            printf("%s
    ", str); } }

    そしてmain.cppはhelloモジュールを使用したメインプログラムです.
    import hello;
    
    int main() {
        hello::say("hello module!");
        return 0;
    }

    次にxmakeを実行して、このプログラムを構築しましょう.
    ruki:hello ruki$ xmake 
    [  0%]: ccache compiling.release src/hello.mpp
    [ 50%]: ccache compiling.release src/main.cpp
    [100%]: linking.release hello
    build ok!

    非常に簡単ではないか、xmake内部ではすべての詳細論理が処理され、開発者にとっては、ソースファイルとしてモジュールファイル*.mppが追加されただけである.
    モジュールインタフェースファイル
    上記の*.mppはxmakeが推奨するモジュールインタフェースファイルの命名であるが、各コンパイラはモジュールファイルのデフォルト接尾辞名が統一されていないため、clangでは*.cppm、msvcでは*.ixxであり、コンパイラにまたがって統一されたモジュールプロジェクトを記述するのに非常に友好的ではないため、ここではbuild2の推奨方式を参照する.統一された*.mpp接尾辞を用いて、xmake下のモジュールプロジェクトインタフェースのコマンドを規範化する.
    もちろん、xmake推奨ネーミング方式もサポートされていますが、*.ixx*.cppmなどの接尾辞名については、xmakeも完全に互換性があり、add_filesに直接追加することもできます.
    その他の例
    xmakeプロジェクトにはc++modulesに関するエンジニアリングexamplesも多く内蔵されており、興味のある方は参考にしてください:c++module examples
    set_toolchainインタフェースの変更
    set_toolchainこのインタフェースは主にtargetに対して異なるコンパイルツールチェーンを設定するために使用され、2.2.2.9以前のバージョンではadd_toolsset_toolsの2つのインタフェースが同じことを処理していたが、この2つのインタフェースの命名と使用上と規範が一致していないため、いくつかの調整変更を行い、このset_toolchainの新しいインタフェースは、ツールチェーンをよりよく設定します.add_files("*.c")に追加されたソースファイルの場合、デフォルトでは、システムが最も一致するコンパイルツールを呼び出してコンパイルするか、xmake f --cc=clangコマンドで手動で変更しますが、これらはすべてのtargetターゲットにグローバルに影響します.
    特定の要件がある場合は、現在のプロジェクトの次の特定のtargetターゲットに対して、異なるコンパイラ、リンク、または特定のバージョンのコンパイラを個別に指定する必要があります.この場合、このインタフェースは次のように使用できます.
    target("test1")
        add_files("*.c")
    
    target("test2")
        add_files("*.c")
        set_toolchain("cc", "$(projectdir)/tools/bin/clang-5.0")

    上記の説明では、test 2ターゲットのコンパイラのみを特別に設定し、特定のclang-5.0コンパイラを使用してtest 2をコンパイルしますが、test 1はデフォルト設定を使用します.
    一部のコンパイラファイル名が不規則で、xmakeが既知のコンパイラ名として処理されていることを正常に認識できない場合は、次のようなツール名プロンプトを追加することもできます.
    set_toolchain("cc", "gcc@$(projectdir)/tools/bin/mipscc.exe")

    上記説明の設定mipscc.exeはcコンパイラとして,xmakeをgccのパラメトリック処理方式としてコンパイルすることを提示する.
    socket io
    このインタフェースは初歩的に実現され、lua協程のioスケジューリングをサポートし、高同時のio読み書き(後期にはプロセス、pipeのスケジューリングサポートも同時にサポートされる)を実現し、現在は主にxmake自身の使用に用いられ、後続の遠隔コンパイルと分布式コンパイルの準備に用いられるため、しばらくユーザー自身の使用を開放しないが、後続の完備後、開放される.ユーザーも自分のプラグインの中でsocket ioを通じていくつかのサービスプログラムを作ることができます.
    しかし、ユーザーが使うシーンは多くないかもしれませんが、xmakeは構築ツールにすぎず、ユーザー自身にio通信をさせることはめったにありません.
    コンテンツの更新
    新しいプロパティ
  • #569:c++モジュールの実験的サポート
  • を追加
  • xmake project -k xmakefileジェネレータ
  • を追加する.
  • 620:グローバル~/.xmakerc.luaプロファイルを追加し、すべてのローカルエンジニアリングに有効にする.
  • 593:core.base.socketモジュールを追加し、次のリモートコンパイルと分散コンパイルの準備をします.

  • 改善
  • #563:構築ロジックを再構築し、特定の言語の構築を独立したrulesから
  • に抽出する
  • #570:Qt構築を改良し、qt.applicationqt.widgetappqt.quickappの2つの構築規則
  • に分割する.
  • #576:set_toolchainadd_toolsの代わりにset_toolsを使用し、古いインタフェースの使用の曖昧さを解決し、より理解しやすい設定方法
  • を提供する.
  • 改良xmake createテンプレートエンジニアリング作成
  • #589:デフォルトの構築タスク数を改善し、cpu coreを十分に利用して全体のコンパイル速度
  • を高速化
  • #598:改良find_packageはmacOS上で対をサポートする.tbdシステムライブラリファイルの検索
  • #615:他のarchおよびiosのインストールおよび使用をサポートするconanパッケージ
  • #629:hashを改良する.uuidはuuid v 4
  • を実現する
  • #639:パラメータ解析器の改良-jNスタイル参照
  • をサポート
    Bugs修復
  • #567:シーケンス化オブジェクトの修復時に発生するメモリオーバーフローの問題
  • #566:インストールリモート依存リンク順序の問題
  • を修正する.
  • #565:vcpkgパケットの運転PATH設定の問題を修復する
  • #597:xmake requireインストールパッケージの修復時間が長すぎる問題
  • #634:modeを修復する.coverage構築規則、flags検出
  • を改善
    https://tboox.org/cn/2019/12/...
    個人用ページ
    個人プロジェクト