web-dev-qa-db-ja.com

CMakeを使用してCFLAGSおよびCXXFLAGSオプションを設定する

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"のみを使用するように強制するにはどうすればよいですか?

71
majie

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

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

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb")
69
Fraser

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

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で定義された値が上書きされます

12
carl-erwin

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

export CFLAGS=-ggdb
export CXXFLAGS=-ggdb

CMakeは、それらをすべての構成フラグに追加します。

7
Virus_7

Unixシステムでは、いくつかのプロジェクトでこれらの行をCMakeLists.txtに追加しましたが、base/usr/include)およびlocalinclude(/ 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を使用する必要があります

4
sbz