4

を使用してブースト ライブラリをコンパイルする必要がありExternalProject_Add、Clang を使用する MacOS プラットフォームではビルド コマンドに c++11 フラグが必要です。

コマンドは次のようになります。

./bin/b2 debug release cxxflags="-std=c++11 -stdlib=libc++" linkflags=-stdlib=libc++

しかし、引用符とスペースに問題があります。

set(BOOST_CXX_FLAGS cxxflags="-std=c++11 -stdlib=libc++")
set(BOOST_TOOL_SET toolset=clang ${BOOST_CXX_FLAGS}
linkflags=-stdlib=libc++)
ExternalProject_Add(boost
  ....
  BUILD_COMMAND ./bin/b2 debug release
    ${BOOST_TOOL_SET} 
  ....
)

${BOOST_TOOL_SET}値はリストであり、その中のcxxflags="-std=c++11 -stdlib=libc++"1 つの項目です。生成されたコマンド ラインが奇妙になります。

./bin/b2 debug release "cxxflags=\"-std=c++11 -stdlib=libc++\""
linkflags=-stdlib=libc++

引数内のスペースを検出して引用符で囲むと、CMakeによってフラグが変換されたようですが、それは私が望むものではありません。

インターネットで検索しましたが、ヘルプが見つかりませんでした。この問題に関するヒントはありますか?

4

2 に答える 2

3

これはうまくいくはずです:

set(BOOST_CXX_FLAGS "cxxflags=-std=c++11 -stdlib=libc++")

これは生成するはずです

./bin/b2 debug release "cxxflags=-std=c++11 -stdlib=libc++"

通常のシェル解析ルールの下では、これはあなたのために働くものと同等です:

./bin/b2 debug release cxxflags="-std=c++11 -stdlib=libc++"
于 2013-06-17T12:49:43.427 に答える
1

cxxflags="-std=c++11 -stdlib=libc++"要求されたコマンドラインを b2 exe に正しくフォーマットされた部分で取得する方法が見つからないため、これはあなたの質問に正確には答えません。

cxxflags=ただし、 2回呼び出すことで目的の効果を達成できると思います。各引数は、最終的に b2 によって呼び出されるコンパイラ フラグに追加されます。

したがって、次のことができるはずです。

set(BOOST_CXX_FLAGS cxxflags=-std=c++11 cxxflags=-stdlib=libc++)

そして b2 によって呼び出される最終的なコマンドは次のようになります

"clang++" ... -std=c++11 -stdlib=libc++ ...

これを確認する-d+2には、コマンドに次を追加します。

BUILD_COMMAND ./bin/b2 debug release ${BOOST_TOOL_SET} -d+2

これにより、完全なコマンドが boost-stamp ディレクトリの boost-build-out.log ファイルに書き込まれます。

于 2013-06-17T23:45:37.727 に答える