私は Scientific Linux (SL)を使用しています。一連のC++(.cpp)ファイルを使用するプロジェクトをコンパイルしようとしています。
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
?ある場合、どのCMakeListsですか? project/Build
またはproject/src/project
?
チップの答えは役に立ちましたが、SET
行がCMAKE_CXX_FLAGS_DEBUG
を上書きしたため、-g
デフォルトが削除され、デバッグ情報なしで実行可能ファイルがビルドされました。デバッグ情報and-O0
最適化(cmakeバージョン2.8.12.2)を使用してビルドされた実行可能ファイルを取得するには、プロジェクトソースディレクトリのCMakeLists.txtに小さな追加の変更を加える必要がありました。
以下をCMakeLists.txtに追加して、-O0
を追加し、-g
を有効のままにします。
# Add -O0 to remove optimizations when using gcc
IF(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
ENDIF(CMAKE_COMPILER_IS_GNUCC)
これにより、CMakeによるデバッグにすでに使用されているフラグに-O0
最適化が追加され、クロスプラットフォームプロジェクトを使用している場合にのみGCCビルドに含まれます。
または呼び出し時に:
cmake -DCMAKE_BUILD_TYPE=DEBUG \
-DCMAKE_C_FLAGS_DEBUG="-g -O0" \
-DCMAKE_CXX_FLAGS_DEBUG="-g -O0"
次に確認します:
make VERBOSE=1
https://stackoverflow.com/questions/5820303/how-do-i-force-make-gcc-to-show-me-the-commands で説明されているGCCビルドコマンドを表示するには
Ubuntu 17.04、CMake 3.7.2でテスト済み。
これをCMakeLists.txtに追加します(プロジェクトのソースディレクトリにあるものです。ビルドディレクトリでは何も変更しないでください)。
SET(CMAKE_CXX_FLAGS_DEBUG "-O0")
SET(CMAKE_C_FLAGS_DEBUG "-O0")
その後
$ cmake -DCMAKE_BUILD_TYPE=Debug
動作します。または、これをCMakeLists.txtに追加するだけです。
SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")