問題タブ [b2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
191 参照

xcode - CMake での CXX 変数の奇妙な動作、MacOS Catalina でのブースト インストールの中断

私たちのチームは、科学的な C++ ライブラリの新しいリリースに取り組んでいます。ただし、MacOS Catalina で CMake にブーストを含めようとすると、全体を理解できない問題が発生しました。

まず、問題について詳しく説明します。最後に、私の理解から問題を要約した最小限の実例を提供します。

全体像の目標

私たちの大きな目標は、ソフトウェア パッケージでブースト ライブラリを使用することです。そのために、CMakeFile 内でB2を使用します。私たちはこのファイルboost.cmakeに基づいています。この問題は、 を呼び出すときにすでに発生しています。bootstrap.sh

問題

B2 は、ローカル コンパイラが単純な c++11 ファイルを実行できるかどうかをチェックします (これは で発生しbuild.sh、実行された cxx ファイルは ですcheck_cxx11.cpp)。これは、Linux システムでそのまま使用できるようです。ただし、macOS Catalina では、次のものが見つからないために失敗します<wchar.h>

ただし、端末から clang++ または g++ を使用して cpp の例をコンパイルすると、エラーは発生しません。

この問題は、CMake によってCXX設定された環境変数が原因であることがわかりました(既に行で)。/Library/Developer/CommandLineTools/usr/bin/c++project(test LANGUAGES CXX)

CXXCMakeを呼び出す前に未定義の場合、エラーが発生します。Cmakeを実行する前にエクスポートCXX=/usr/bin/clang++すると、同じエラーが発生します。ただし、エクスポートするCXX=/usr/bin/g++と、すべて正常に動作します

再現性

CMake と xcode のみがインストールされている macOS Catalina (10.15.7) のクリーン インストールでこの問題を再現できたので、これは私のマシンだけの問題ではなく、少なくともこの特定の OSX バージョン。

最小限の (ない) 作業例

この問題がCXX変数に関連していることがわかったので、この問題を要約する最小限の実例を作成しました。

私のCMakeLists.txtは次のようになります。

ブースト.cmake :

build_shell.sh :

check_cxx11.cpp:

CXXcmake を実行する前にエクスポートしないと、出力は次のようになります。

コードは失敗します。

エクスポートするCXX=/usr/bin/clang++と、出力は

コードは失敗します。

エクスポートするCXX=/usr/bin/g++と、出力は

そしてコードは機能します。

質問

なぜこれが起こるのかを理解したいと思います: CMake がCXX変数を (明らかに) 間違ったものに変更するのはなぜですか? コードが g++ では機能するのに、clang++ では機能しないのはなぜですか?

インストール プロセスは、環境変数をエクスポートする必要なく、MacOS ユーザーにとってすぐに使用できるはずです。この問題を解決するには、何らかの方法でコードを機能させるためだけに何かをハードコーディングするのではなく、問題を理解する必要があります。