使っています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
デフォルトです。-O
https://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_DEBUG
。https://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でテストされました。