15

我只是想在调试模式下构建一个 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)到我的 mainCMakeLists.txt以检查值 get 是否在某处被覆盖。但是第一个输出是READ_ACCESS我的 main 另外我添加variable_watch(CMAKE_BUILD_TYPE)到我的 mainCMakeLists.txt并且已经存在的值Release

有人知道为什么 cmake 会忽略配置吗?

我正在使用 cmake 2.8.7 版。

4

3 回答 3

17

好的,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()

谢谢你的提示!

于 2014-05-28T15:58:15.813 回答
1

我认为您的配置有问题..

我在这里写了一个完整的简单示例: 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 版本在系统上运行它时会发生什么?

于 2014-05-28T15:22:05.837 回答
0

这对我有用:

IF(${CMAKE_BUILD_TYPE} MATCHES Debug)
...
ENDIF()
于 2020-04-15T14:24:32.067 回答