Windows(Visual Studio)とLinuxマシン(gcc)でプロジェクトをビルドするためにCMakeを使用しています。のように、一部のコードを「デバッグ専用」としてマークしたい
#ifdef DEBUG
//some logging here
#endif
問題は、CMakeの「Debug」ビルドタイプのすべてのプラットフォームで使用できるコンパイラ定義は何ですか。 DEBUGは存在しないようです。 (ビルドの種類がデバッグの場合にのみ、ログなどを取得したいと思います。)
CMakeは、デフォルトで-DNDEBUG
をCMAKE_C_FLAGS_ {RELEASE、MINSIZEREL}に追加します。したがって、#ifndef NDEBUG
を使用できます。
独自の定義を追加することをお勧めします。 CMake
記号CMAKE_C_FLAGS_DEBUG
には、デバッグモードでのみ使用されるフラグを含めることができます。例えば:
C
:
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DMY_DEBUG")
C++
:
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DMY_DEBUG")
コードで次のように記述できます。
#ifdef MY_DEBUG
// ...
#endif
(たぶん、あなたは"/DMY_DEBUG"
(ビジュアルスタジオ用)。
CMake> = 2.8では、 target_compile_definitions
を使用します:
target_compile_definitions(MyTarget PUBLIC "$<$<CONFIG:DEBUG>:DEBUG>")
デバッグモードでコンパイルすると、コードで使用するDEBUGシンボルが定義されます。これは、Visual StudioやXcodeなどのIDEでも機能します。cmakeは、すべてのコンパイルモードで単一のファイルを生成します。
ターゲットごとにこれを行う必要があります[1]。または、 add_compile_options
(Cmake> = 3.0)を使用することもできます。
add_compile_options("$<$<CONFIG:DEBUG>:-DDEBUG>")
Visual C++の最近のバージョン(少なくともVS2015以降)では、パラメーターに/または-を使用できるため、コンパイラー全体で正常に機能することに注意してください。このコマンドは、追加したい他のコンパイルオプションにも役立ちます(MSVCのリリースモードでは「/ O2」、G ++/Clangのリリースモードでは「-O3」)。
[1]:注:CMake> = 3.12(現在ベータ版)には、ジェネレータ式をサポートするadd_compile_definitions
もあり、これはすべてのターゲットに影響します。