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プロジェクトを構築する方法を紹介します.まず簡単な例を見てみましょう.
c++modulesファイルの構築をサポートするxmakeです.luaは、
そしてmain.cppはhelloモジュールを使用したメインプログラムです.
次にxmakeを実行して、このプログラムを構築しましょう.
非常に簡単ではないか、xmake内部ではすべての詳細論理が処理され、開発者にとっては、ソースファイルとしてモジュールファイル
モジュールインタフェースファイル
上記の
もちろん、xmake推奨ネーミング方式もサポートされていますが、
その他の例
xmakeプロジェクトにはc++modulesに関するエンジニアリングexamplesも多く内蔵されており、興味のある方は参考にしてください:c++module examples
set_toolchainインタフェースの変更
set_toolchainこのインタフェースは主にtargetに対して異なるコンパイルツールチェーンを設定するために使用され、2.2.2.9以前のバージョンでは
特定の要件がある場合は、現在のプロジェクトの次の特定のtargetターゲットに対して、異なるコンパイラ、リンク、または特定のバージョンのコンパイラを個別に指定する必要があります.この場合、このインタフェースは次のように使用できます.
上記の説明では、test 2ターゲットのコンパイラのみを特別に設定し、特定のclang-5.0コンパイラを使用してtest 2をコンパイルしますが、test 1はデフォルト設定を使用します.
一部のコンパイラファイル名が不規則で、xmakeが既知のコンパイラ名として処理されていることを正常に認識できない場合は、次のようなツール名プロンプトを追加することもできます.
上記説明の設定mipscc.exeはcコンパイラとして,xmakeをgccのパラメトリック処理方式としてコンパイルすることを提示する.
socket io
このインタフェースは初歩的に実現され、lua協程のioスケジューリングをサポートし、高同時のio読み書き(後期にはプロセス、pipeのスケジューリングサポートも同時にサポートされる)を実現し、現在は主にxmake自身の使用に用いられ、後続の遠隔コンパイルと分布式コンパイルの準備に用いられるため、しばらくユーザー自身の使用を開放しないが、後続の完備後、開放される.ユーザーも自分のプラグインの中でsocket ioを通じていくつかのサービスプログラムを作ることができます.
しかし、ユーザーが使うシーンは多くないかもしれませんが、xmakeは構築ツールにすぎず、ユーザー自身にio通信をさせることはめったにありません.
コンテンツの更新
新しいプロパティ #569:c++モジュールの実験的サポート を追加 を追加する. 620:グローバル 593:
改善 #563:構築ロジックを再構築し、特定の言語の構築を独立したrulesから に抽出する #570:Qt構築を改良し、 に分割する. #576: を提供する.改良 #589:デフォルトの構築タスク数を改善し、cpu coreを十分に利用して全体のコンパイル速度 を高速化 #598:改良 #615:他のarchおよびiosのインストールおよび使用をサポートするconanパッケージ #629:hashを改良する.uuidはuuid v 4 を実現する #639:パラメータ解析器の改良 をサポート
Bugs修復 #567:シーケンス化オブジェクトの修復時に発生するメモリオーバーフローの問題 #566:インストールリモート依存リンク順序の問題 を修正する. #565:vcpkgパケットの運転PATH設定の問題を修復する #597:xmake requireインストールパッケージの修復時間が長すぎる問題 #634:modeを修復する.coverage構築規則、flags検出 を改善
https://tboox.org/cn/2019/12/...
個人用ページ
個人プロジェクト
また、このバージョンには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_tools
とset_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通信をさせることはめったにありません.
コンテンツの更新
新しいプロパティ
xmake project -k xmakefile
ジェネレータ~/.xmakerc.lua
プロファイルを追加し、すべてのローカルエンジニアリングに有効にする.core.base.socket
モジュールを追加し、次のリモートコンパイルと分散コンパイルの準備をします.改善
qt.application
をqt.widgetapp
とqt.quickapp
の2つの構築規則set_toolchain
とadd_tools
の代わりにset_tools
を使用し、古いインタフェースの使用の曖昧さを解決し、より理解しやすい設定方法xmake create
テンプレートエンジニアリング作成find_package
はmacOS上で対をサポートする.tbdシステムライブラリファイルの検索-jN
スタイル参照Bugs修復
https://tboox.org/cn/2019/12/...
個人用ページ
個人プロジェクト