CMakeを使用して-O0を最適化せずにコンパイルする方法

CMakeを使用して-O0を最適化せずにコンパイルする方法

使っていますScientificLinux(SL).複数のC ++(.cpp)ファイルを使用するプロジェクトをコンパイルしようとしています。

そのディレクトリに compileとuser/project/Build入力makeし、すべての .cpp ファイルをリンクします。それから行ってタイプuser/run/しなければなりません。./run.sh values.txt

GDBを使用してデバッグするには、に移動して入力してuser/run実行gdb ../project/Build/bin/Projectする必要がありますrun -Project INPUT/inputfile.txt。ただし、変数の値を印刷しようとしていますp variablename

しかし、メッセージを受け取りましたs1 = <value optimized out>。オンラインでいくつかの調査を行いましたが、-O0この問題を解決するには最適化なしでコンパイルする必要があるようです。しかし、どこで入力しますか?内部にCMakeLists?では、どのCMakeListが必要ですか?project/Buildまたはいずれかproject/src/project

ベストアンサー1

呼び出されたときに通常CMakeを使用してデバッグビルドに必要なものは次のとおりです。

cmake -DCMAKE_BUILD_TYPE=Debug ..

これにより-gフラグが追加され、次のように確認できます。

make VERBOSE=1

以下に説明するように、GCCビルドコマンドが表示されます。https://stackoverflow.com/questions/5820303/how-do-i-force-make-gcc-to-show-me-the-commands

-O0デフォルトではビルドに追加されませんが、Debug以下のように-O0デフォルトです。-Ohttps://stackoverflow.com/questions/1778538/how-many-gcc-optimization-levels-are-thereなどman gccなので、一般的に重要ではありません。

デバッグ用にビルドフラグを明示的に制御するには、次のようにすることもできます。

cmake -DCMAKE_BUILD_TYPE=Debug
      -DCMAKE_C_FLAGS_DEBUG="-g -O0" \
      -DCMAKE_CXX_FLAGS_DEBUG="-g -O0" \
      ..

CMAKE_C_FLAGS_DEBUGとのデフォルト値は次のとおりですCMAKE_CXX_FLAGS_DEBUGhttps://stackoverflow.com/questions/16851084/how-to-list-all-cmake-build-options-and-their-default-valuesそして:

cmake -LAH .

これは作る:

// Flags used by the CXX compiler during DEBUG builds.                                                   
CMAKE_CXX_FLAGS_DEBUG:STRING=-g                                                                          
                                                                                                                                                                                          
// Flags used by the C compiler during DEBUG builds.                                                     
CMAKE_C_FLAGS_DEBUG:STRING=-g

このコマンドは、ビルドタイプのデフォルトの動作を明確にする他の関心のある値も表示します。

// Flags used by the CXX compiler during all build types.                               
CMAKE_CXX_FLAGS:STRING=                

// Flags used by the CXX compiler during DEBUG builds.                                       
CMAKE_CXX_FLAGS_DEBUG:STRING=-g             

// Flags used by the CXX compiler during MINSIZEREL builds.                               
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG

// Flags used by the CXX compiler during RELEASE builds.                                         
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG     

// Flags used by the CXX compiler during RELWITHDEBINFO builds.
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG

-DCMAKE_BUILD_TYPE=Debug渡されない場合は空で、CMAKE_BUILD_TYPE追加のCMAKE_CXX_FLAGS_XXX値は追加されないため、noで終わります-g

Ubuntu 22.10、CMake 3.24.2でテストされました。

おすすめ記事