3

コマンドラインで -DCMAKE_CXX_FLAGS_RELEASE="..." などを使用してユーザーが後で変更できるように、コンパイラ フラグのデフォルトを設定しようとしています。

私が使用する場合:

SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" )

コマンドラインまたは ccmake を使用してフラグを変更することはできません。

私が使用する場合

SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" )

フラグはまったく設定されていません。

これを行う正しい方法はありますか?

4

1 に答える 1

3

それで、実験することで、私はこれを理解しました(一種の)。

最初に、キャッシュには既に値があるため、CACHE バージョンが機能しないことがわかりました。つまり、最後に FORCE を適用すると、次のように設定されます。

SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" FORCE )

明らかに、これはユーザーが自分でフラグを指定することを許可しないため、最初のオプションと同等になります。

解決策は次のとおりです。

cmakeファイルの先頭(プロジェクトコマンドの前)にキャッシュ設定コマンドを配置すると、cmakeが内部的に値を設定する前に値が設定されます。したがって、次のようになります。

SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" )
SET( CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" )
...
project( whatever )
...

そしてそれは動作します。いくつかの異なるデフォルトフラグを必要とするコンパイラを使用する場合、これは悪いことだと思います。ただし、とにかく自分でデフォルトを設定しないでください。

よりクリーンな方法があるかどうか、私はまだ疑問に思っています。

于 2013-09-14T17:53:36.947 に答える