GCCコンパイル済みプロジェクトでは、
- 各ターゲットタイプ(デバッグ/リリース)に対してCMakeを実行するにはどうすればよいですか?
- CMakeを使用してデバッグとリリースのC / C ++フラグを指定するにはどうすればよいですか?
- メインの実行可能ファイルがコンパイルされ
g++
、1つのネストされたライブラリがコンパイルされることをどのように表現しgcc
ますか?
GCCコンパイル済みプロジェクトでは、
g++
、1つのネストされたライブラリがコンパイルされることをどのように表現しgcc
ますか?回答:
CMakeでは、通常、「ソース外」ビルドを行うことをお勧めします。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
はコンパイラに適切なフラグを追加します。ビルド構成もRelWithDebInfo
ありMinSizeRel
ます。
フラグを変更/追加するには、変数を追加できるツールチェーンファイル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は、さまざまなソースファイルに適したコンパイラを自動的に検出して使用します。
-i
オプションを指定すると、次のエラーメッセージが表示されますThe "cmake -i" wizard mode is no longer supported.
。私はcmake 3.7.1を使用しています
3.0.0
です。リファレンス。
CMAKE_BUILD_TYPE
が設定されていない場合、cmakeはデフォルトのビルドタイプを選択しないため、生成されたコンパイラコマンドラインはどのビルド構成とも一致しません。
デバッグ/解放フラグについては、CMAKE_BUILD_TYPE
変数を参照してください(それをとして渡しますcmake -DCMAKE_BUILD_TYPE=value
)。以下のような値をそれを取るRelease
、Debug
など、
https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables#compilers-and-tools
cmakeは拡張子を使用してコンパイラを選択するため、ファイルに.cという名前を付けるだけです。
これをさまざまな設定で上書きできます。
例えば:
set_source_files_properties(yourfile.c LANGUAGE CXX)
.cファイルをg ++でコンパイルします。上記のリンクは、C / C ++用の特定のコンパイラを選択する方法も示しています。
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リストとして格納されます。これは、セミコロンで要素を区切る単なる文字列;
です。
list(APPEND CMAKE_CXX_FLAGS_DEBUG "-g3")
-g3は、コマンドを終了し、確実に失敗する新しいコマンド-g3を開始する前に、セミコロンを追加しますか?
CMAKE_CXX_FLAGS
ですない cmakeのリストが、スペースで区切られたコマンドラインフラグの文字列。私はその行動に一貫性がないと思います...
を使用して、再生成せずに別の構成を構築する場合も実行できますcmake --build {$PWD} --config <cfg>
。マルチ構成ツールの場合は、<cfg>
exを選択します。Debug、Release、MinSizeRel、RelWithDebInfo
https://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir
--config
結果なしでオプションで遊んでみました。$<CONFIG>
変数に-DCMAKE_BUILD_TYPE=
は影響しません。
// CMakeLists.txt:リリース
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)
// CMakeLists.txt:デバッグ
set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
CMAKE_CONFIGURATION_TYPES
によると、の可能な値が含まれているためCMAKE_BUILD_TYPE
です。したがって、他の回答が示唆するように、後者を設定する必要があります。多分あなたの解決策はあなたが持っているものに可能な選択肢を制限するのでうまくいくでしょう。
cmake -i ..
代わりにa を実行することもできるので、cmakeは対話的に実行され、必要なビルドのタイプ(None、Release、Debug、MinSizeRel、RelWithDebInfo)を尋ねます。