2011-12-11 18 views

答えて

5

環境変数GLIBCXX_FORCE_NEWは、実行時にコンパイルされたプログラムの動作にのみ影響します(gcc documentation参照)。これをプログラムのコンパイル時に(例えば、CMAKE_CXX_FLAGSを設定することによって)プリプロセッサ定義として追加することは効果がない。

CMakeを使用すると、ビルド対象の実行時間に影響する環境変数をCMake testsに設定することができます。

add_test(NAME MyTest CONFIGURATIONS Debug COMMAND MyExecutable) 
set_tests_properties(MyTest PROPERTIES ENVIRONMENT "GLIBCXX_FORCE_NEW=1") 
1

あなたはCMAKE_BUILD_TYPEをしたいです。

if(CMAKE_BUILD_TYPE STREQUAL "Debug")を使用してビルドタイプを確認できます。

また、STREQUALでは大文字と小文字が区別されるため、チェックの前に変数string(UPPERCASE ...)を使用することをお勧めします。

+0

それはgccが何を望んでいるので、これはXcodeの –

0

なぜビルドに「環境変数」が必要ですか?デバッグのためのコンパイラやプリプロセッサフ​​ラグを設定したい場合はビルドのみ、例えば

SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DGLIBCXX_FORCE_NEW=1")

if(CMAKE_BUILD_TYPE STREQUAL "Debug")をテストしないでください、それはすべての非Makefileのcmakeの発電機(XcodeのとOSX上で動作しません、CMAKE_CXX_FLAGS_DEBUGを使用

+0

では動作しませんが(私はvalgrindのですこれを設定する必要があります。次のコマンドはGLIBCXX_FORCE_NEW変数が設定された実行可能ファイルを実行しますDEBUGビルドのために有効なテストを追加しますhappy):http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt04ch11.html 'デフォルトアロケータのライブラリ内でメモリキャッシングをグローバルに無効にするには、実行前にシステムの環境にGLIBCXX_FORCE_NEW(任意の値)を設定するだけですプログラム。プログラムが環境内でGLIBCXX_FORCE_NEWでクラッシュした場合、古いライブラリ(キャッシュされた割り当てを使用している可能性があるオブジェクト)に対して構築されたオブジェクトにリンクした可能性があります。 ' – kfmfe04

+0

コンパイルではなくランタイムです。したがって、サクラの答えは正しいものになります。 –

関連する問題