5

Intel コンパイラ icc (または icpc) を CMake ベースのプロジェクトで使用したいと考えています (Linux 上での価値があります)。もちろん、cmakeを呼び出すときにCXX変数をエクスポートできます。

CXX=icpc cmake ../

これはうまくいきます。ただし、カスタムオプションを介してこの選択を利用できるようにしたいと思います。このために、カスタムオプションを解析します。

cmake -DMY_COMPILER_OPTION=Intel ..

なので

IF (MY_COMPILER_OPTION STREQUAL "Intel")
  MESSAGE(STATUS "** Compiling with Intel settings **")
  SET(CMAKE_CXX_COMPILER "icpc")
  SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -w")
  SET(CMAKE_CXX_FLAGS_DEBUG "-g")
ENDIF ()

CMAKE_CXX_COMPILERいくつかのコンパイラフラグと一緒に設定します。これも機能しますが、重要な「しかし」があります。

また、icc でコンパイルするときにコードにオプション-ipo(手続き間の最適化) を使用したいと思います。また、ビルド プロセス内で静的ライブラリをコンパイルする必要があります。これが機能するには、Intel のものを使用する必要がありますxiar(また、xilink私も推測します)。

cmake は実際にこのための特別なプロパティを提供しています

set_property(TARGET mytarget PROPERTY INTERPROCEDURAL_OPTIMIZATION 1)

ただし、これは、コンパイラが環境変数を介して設定されている場合にのみ適切に機能するようです (その後、xiar が使用されます)。このプロパティを介してコンパイラを設定すると、CMAKE_CXX_COMPILER無視されます。

これを行う別の方法はありますか?おすすめの方法は?または、少なくとも回避策ですか?

4

3 に答える 3

6

わかりました、ここには回答がなかったので、この問題に関するヘルプを求めてCMake メーリング リストリストにも目を向けました。そこの専門家の同意は、私がこれをやろうとしていた方法はかなり悪い考えであるようです. その理由は、カスタム フラグの解析が初期化プロセスの後半に発生するためです。したがって、環境変数を介してコンパイラを設定することに依存し、初期構成の実行中に CMake にその魔法を実行させる必要があります。私は私のアプローチを変更します..

于 2012-02-08T09:05:55.023 に答える
2

基本的に、コンパイラを変更しようとすることは避けてください。FAQを参照してください: 別のコンパイラを使用するにはどうすればよいですか? . CMake ツールチェーン ファイルは、特殊な HPC コンパイラなど、いくつかの複雑なケースをサポートする方法を提供します。

于 2013-05-19T20:52:32.700 に答える