4

cmakeプロジェクトの自動最適化フラグベンチマークを実行したいと思います。プロジェクトはクロスコンパイルされており、基本的なc/cxxフラグは。で割り当て可能なツールチェーンファイルに設定されています-DCMAKE_TOOLCHAIN_FILE=<...>

ベンチマーク中にc/cxxフラグを変更したいのですが、ベンチマークの反復ごとにツールチェーンファイルを変更したくありません。-mtune=cortex-a8ツールチェーンから他の値(たとえば、)に設定されたいくつかのフラグを変更したいだけです-mtune=cortex-a9。最善の方法は使用することだと思います-DMY_TUNE_FLAG=<..>

しかし、以前に設定されたフラグを変更するにはどうすればよいですか?(c / cxxフラグにフラグを追加しないでください)。

4

1 に答える 1

4

私は自分で解決策を見つけました。string便利な機能はどこにありますか。たとえば、変数 BENCH_ARCH を使用して ARM アーチを変更できます。すべてのデフォルト C/C++ フラグ定義の後にツールチェーン ファイルに書き込みました。まず、キャッシュ用の変数を追加します。

...
set(BENCH_ARCH "${BENCH_ARCH}" CACHE STRING "Arch" FORCE)`
...

その後、変数が設定されていることを確認し、フラグ変数を置き換えます

if(BENCH_ARCH)
    string(REGEX REPLACE "-march=[A-Za-z_0-9/-]*" "-march=${BENCH_ARCH}"          <variable, which set flags> ${<variable, which set flags>})
endif()
...

例えば:

string(REGEX REPLACE "-march=[A-Za-z_0-9/-]*" "-march=${BENCH_ARCH}" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})

これで、デフォルトのツールチェーン設定を有効にcmake -DBENCH_ARCH=armv5te -DCMAKE_TOOLCHAIN_FILE=<...> ...して有効にするため-march=armv5teに使用できます。cmake -DCMAKE_TOOLCHAIN_FILE=<...> ...これが私だけでなく役立つことを願っています。

于 2012-06-18T10:41:36.877 に答える