cmake игнорирует-D тип сборки CMAKE=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
чтобы проверить, переопределено ли значение get где-то. Но первый вывод-это READ_ACCESS
в моей основной
Кроме того, я добавил variable_watch(CMAKE_BUILD_TYPE)
к моему главная CMakeLists.txt
и значение там уже есть Release
.
есть ли у кого-нибудь идея, почему cmake игнорирует конфигурацию?
я использую cmake версии 2.8.7.
заранее спасибо за любую помощь!
2 ответов
ОК fgrep -R "CMAKE_BUILD_TYPE"
наконец-то нашел проблему для меня. В некоторых CMakeLists.txt
-файл я нашел что-то вроде этого:
SET( CMAKE_BUILD_TYPE Release ... FORCE )
это переопределяет все пользовательские параметры (из-за FORCE
).
что работает для меня, так это:
IF( NOT CMAKE_BUILD_TYPE )
SET( CMAKE_BUILD_TYPE Release ... FORCE )
ENDIF()
Спасибо за ваши подсказки!
Я предполагаю, что что-то не так с вашей конфигурацией..
Я написал полный, простой пример здесь: 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?