98

Linuxで実行されているコードをデバッグしたいだけで、デバッグビルド(-O0 -ggdb)が必要です。だから私はこれらのものを私のに追加しましたCMakeLists.txt

set(CMAKE_BUILD_TYPE DEBUG)
set(CMAKE_C_FLAGS "-O0 -ggdb")
set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_C_FLAGS_RELEASE "-O0 -ggdb")
set(CMAKE_CXX_FLAGS "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "-O0 -ggdb")

私がコンパイルしようとしたとき、私は使用して冗長になりましたmake VERBOSE=1 そして私はこのように出力を観察しました

... /usr/bin/c++ -D_BSD_SOURCE **-O0 -ggdb** -Wnon-virtual-dtor 
-Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W 
-Wpointer-arith -Wformat-security -fno-exceptions -DQT_NO_EXCEPTIONS 
-fno-check-new -fno-common -Woverloaded-virtual -fno-threadsafe-statics 
-fvisibility=hidden -fvisibility-inlines-hidden **-g -O2** 
-fno-reorder-blocks -fno-schedule-insns -fno-inline ...

どうやらコードはでコンパイルされて"-g -O2"おり、これは私が望むものではありません。どうすればそれ"-O0 -ggdb"だけを使用するように強制できますか?

4

4 に答える 4

94

CMakeLists.txtのコマンドのにフラグを設定する必要があります。project

include(${QT_USE_FILE})また、またはを呼び出す場合は、Qtコマンドの後add_definitions(${QT_DEFINITIONS})にこれらのコマンドを含める必要があります。これらのsetコマンドはさらにフラグを追加するためです。その場合、Qtフラグにフラグを追加したいだけなので、次のように変更します。

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb")
于 2012-04-10T10:33:26.100 に答える
26

私にとってうまく機能する最も簡単な解決策はこれです:

export CFLAGS=-ggdb
export CXXFLAGS=-ggdb

CMakeはそれらをすべての構成のフラグに追加します。必ずCMakeキャッシュをクリアしてください。

于 2017-01-25T04:48:23.170 に答える
17

cmake C/CXXのデフォルトのフラグを変更する必要があります。

によると:CMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE} のメインのものに入れてCMakeLists.txt

Cの場合

set(CMAKE_C_FLAGS_DEBUG "put your flags")
set(CMAKE_C_FLAGS_MINSIZEREL "put your flags")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "put your flags")
set(CMAKE_C_FLAGS_RELEASE "put your flags")

C++の場合

set(CMAKE_CXX_FLAGS_DEBUG "put your flags")
set(CMAKE_CXX_FLAGS_MINSIZEREL "put your flags")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "put your flags")
set(CMAKE_CXX_FLAGS_RELEASE "put your flags")

これにより、CMakeCache.txtで定義されている値が上書きされます

于 2015-08-27T13:16:17.697 に答える
7

Unixシステムでは、いくつかのプロジェクトで、これらの行をCMakeLists.txtに追加しましたが、ベース/ usr / include)とローカルインクルード(/ usr / local / include)が別々のディレクトリにあるため、正常にコンパイルされました。

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/local/include -L/usr/local/lib")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/include")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib")

CおよびC++コンパイラフラグのパスとリンカフラグの正しいディレクトリパスを含む、正しいディレクトリを追加します。

注:C ++コンパイラ(c ++)は-Lをサポートしていないため、CMAKE_EXE_LINKER_FLAGSを使用する必要があります

于 2016-04-18T18:55:39.923 に答える