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


17

私が使用しています科学のLinux(SL)を。多数のC ++(.cpp)ファイルを使用するプロジェクトをコンパイルしようとしています。

ディレクトリにuser/project/Buildmakeすべての.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?1つproject/Buildまたはproject/src/project


ビルドタイプをDEBUGに設定して、もう一度cmakeを実行してみましたか?例(ビルドディレクトリから)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
-steeldriver

1
なぜこれがStack Overflowに投稿されなかったのですか?
ピーターモーテンセン

回答:


10

チップの答えは役に立ちましたが、SET行がCMAKE_CXX_FLAGS_DEBUGこれを上書きして-gデフォルトを削除したため、デバッグ情報なしで実行可能ファイルがビルドされました。デバッグ情報 -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)

これにより、-O0CMakeによるデバッグにすでに使用されているフラグに最適化が追加され、クロスプラットフォームプロジェクトを使用している場合にのみGCCビルドに含まれます。



4

これを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")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.