2012-04-10 20 views
52

Linux上で実行されているコードをデバッグしたいだけで、デバッグビルド(-O0 -ggdb)が必要です。だから私はこれらの事を追加私のCMakeLists.txt:私はmake VERBOSE=1 を使用して冗長になっコンパイルしようとしましたが、私はどうやらコードが"-g -O2"でコンパイルされている。このcmake CFLAGS CXXFLAGS変更

... /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 ... 

のように、出力を観察

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") 

これは私が望むものではありません。 "-O0 -ggdb"のみを強制的に使用するにはどうすればよいですか?

+1

デバッグ可能なビルドが必要な場合は、コマンドラインでdebug configureを実行します。 "cmake -DCMAKE_BUILD_TYPE =デバッグ"結果のビルドには、指定されたビルドシステムのデバッグフラグがオンになります。 cmakeファイル自体を変更する理由はありません。別の-D引数を指定してCMAKE_C_FLAGS値を送信することもできます。 – Atifm

答えて

47

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

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

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb") 
+0

私はこれらのフラグをプロジェクトコマンドの後に入れました。しかし、出力は同じです。 – majie

+0

私はちょうどあなたのフラグの 'QT_NO_EXCEPTIONS'に気付いたので、私は少し答えを拡張しました。私は '$ {QT_DEFINITIONS}'が '-g -O2'を追加していると思います。 – Fraser

+1

はい、これはそれです。これらの 'set'コマンドをQtのものの後に置くと、問題が解決します。どうもありがとうございました。 – majie

9

cmake C/CXXのデフォルトのFLAGSを変更する必要があります。主なCMakeLists.txt 1でCMAKE_BUILD_TYPE={DEBUG/MINSIZEREL/RELWITHDEBINFO/RELEASE} プットによると

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

で定義された値を上書きします
2

は、UNIXシステムでは、いくつかのプロジェクトのために、私はCMakeLists.txtにこれらの行を追加し、それが正常ためベースをコンパイルした(は/ usr/含む)とローカル含む(には/ usr/local/を含みます)区切られたディレクトリに移動します。

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

3

を使用する必要はありません。

export CFLAGS=-ggdb 
export CXXFLAGS=-ggdb 

cmakeのが追加されますすべての設定フラグに適用します。

関連する問題