web-dev-qa-db-ja.com

CMakeのデバッグとリリース

GCCでコンパイルされたプロジェクトでは、

  • 各ターゲットタイプ(デバッグ/リリース)に対してCMakeを実行するにはどうすればいいですか?
  • CMakeを使ってデバッグ/リリースC/C++フラグを指定するにはどうすればいいですか?
  • メインの実行可能ファイルはg++でコンパイルされ、1つのネストされたライブラリはgccでコンパイルされます。
346
Cartesius00

CMakeでは、一般的に "out of source"ビルド を行うことをお勧めします。あなたのプロジェクトのルートにあなたのCMakeLists.txtを作成してください。それからあなたのプロジェクトのルートから:

mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make

そしてDebugの場合(やはりプロジェクトのルートから):

mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

Release/Debugはあなたのコンパイラに適切なフラグを追加します。 RelWithDebInfoMinSizeRelのビルド設定もあります。


CMakeLists.txtおよびCMAKE_C_FLAGS_DEBUG変数を介して、CMAKE_C_FLAGS_RELEASEのフラグを変更または追加することができます。

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")

詳細については CMAKE_BUILD_TYPE を参照してください。


あなたの3番目の質問に関しては、私はあなたが正確に何を求めているのかわかりません。 CMakeはあなたの異なるソースファイルに適したコンパイラを自動的に検出して使用するはずです。

556
kb1ooo

デバッグ/リリースフラグについては、CMAKE_BUILD_TYPE変数を参照してください(cmake -DCMAKE_BUILD_TYPE=valueとして渡します)。 ReleaseDebugなどの値を取ります。

http://cmake.org/Wiki/CMake_Useful_Variables#Compilers_and_Tools

cmakeは拡張子を使用してコンパイラを選択するので、ファイルには.cという名前を付けます。

これをさまざまな設定で上書きすることができます。

例えば:

set_source_files_properties(yourfile.c LANGUAGE CXX) 

G ++で.cファイルをコンパイルします。上記のリンクは、C/C++用の特定のコンパイラを選択する方法も示しています。

19
duncan

CMAKE_CXX_FLAGS文字列を直接操作する代わりに(これはstring(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3") btwを使ってもっとうまくできます)、add_compiler_optionsを使うことができます。

add_compile_options(
  "-Wall" "-Wpedantic" "-Wextra" "-fexceptions"
  "$<$<CONFIG:DEBUG>:-O0;-g3;-ggdb>"
)

これは指定された警告をすべてのビルドタイプに追加しますが、指定されたデバッグフラグのみをDEBUGビルドに追加します。コンパイルオプションはCMakeリストとして保存されることに注意してください。これは、その要素をセミコロン;で区切った単なる文字列です。

8
sebastian

// CMakeLists.txt:release

set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)

// CMakeLists.txt:デバッグ

set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
3
sailfish009

再使用せずに別の構成を作成する場合は、cmake --build {$PWD} --config <cfg>を実行することもできます。マルチ構成ツールの場合は、<cfg> exを選択します。デバッグ、リリース、MinSizeRel、RelWithDebInfo

https://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir

1
Russel Waters