web-dev-qa-db-ja.com

cmakeは-D CMAKE_BUILD_TYPE = Debugを無視します

アサートを有効にするために、デバッグモードでcmakeプロジェクトをビルドしようとしています。私は次のバージョンを試しました:

_cmake -D CMAKE_BUILD_TYPE:STRING=Debug -L ../../
cmake -DCMAKE_BUILD_TYPE:STRING=Debug -L ../../
cmake -DCMAKE_BUILD_TYPE=Debug -L ../../
_

残念ながら、これらのいずれも望ましい効果をもたらしません-その_CMAKE_BUILD_TYPE_はDebugに設定されます(したがって、NDEBUG-フラグはgccに渡されません)。

さらに、variable_watch(CMAKE_BUILD_TYPE)をメインの_CMakeLists.txt_に追加して、値がどこかでオーバーライドされているかどうかを確認しました。しかし、最初の出力はメインの_READ_ACCESS_です。さらに、メインの_CMakeLists.txt_にvariable_watch(CMAKE_BUILD_TYPE)を追加しました。値はすでにReleaseです。

Cmakeが設定を無視する理由を誰かが知っていますか?

Cmakeバージョン2.8.7を使用しています。

12
ma0ho

OK、 fgrep -R "CMAKE_BUILD_TYPE"ようやく問題が見つかりました。一部のCMakeLists.txt- file私はそのようなものを見つけました:

SET( CMAKE_BUILD_TYPE Release ... FORCE )

FORCEのため)すべてのユーザー定義パラメーターをオーバーライドします。

私にとってうまくいくのは:

IF( NOT CMAKE_BUILD_TYPE )
   SET( CMAKE_BUILD_TYPE Release ... FORCE )
ENDIF()

ヒントをありがとう!

15
ma0ho

私はあなたの設定に何か問題があると思います。

私はここに完全で単純な例を書きました: https://dl.dropboxusercontent.com/u/68798379/cmake-build-type.tar.bz2

cmake_minimum_required (VERSION 2.8)

project(playlib)

message("CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")

IF(CMAKE_BUILD_TYPE MATCHES Debug)
  message("Debug build.")
ELSEIF(CMAKE_BUILD_TYPE MATCHES Release)
  message("Release build.")
ELSE()
  message("Some other build type.")
ENDIF()

add_library(TESTLIB SHARED src/test.c)

でcmakeを実行すると

cmake -DCMAKE_BUILD_TYPE=Debug ../../

次の出力が表示されます。

$ ./gen-linux.sh
-- The C compiler identification is GNU 4.8.2
-- The CXX compiler identification is GNU 4.8.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMAKE_BUILD_TYPE = Debug
Debug build.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wojci/stack-overflow/cmake-build-type/build/linux

これは、コマンドラインからCMAKE_BUILD_TYPEが設定され、CMakeLists.txt構成で認識されていることを示しています。

CMakeのバージョンを使用してシステムで実行するとどうなりますか?

1
wojciii