Cmake忽略了CMAKE_BUILD_TYPE=Debug

8

我正在尝试包含依赖于debug/release的编译器标志,例如:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x -Wall -DUSE_BOOST")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CSS_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -O3")

我使用类似以下命令创建构建文件夹:

cmake -DCMAKE_BUILD_TYPE=Release -D UseFortran=True -D CMAKE_CXX_COMPILER=g++-4.6 ~/repos/cliques/cliques

然而,似乎在CMAKE 2.8.7版本中,CMAKE_BUILD_TYPE被忽略了。在另一台机器上的2.8.4版本完美地工作,所以这种方法是否已经被弃用或者还有其他问题?

它并没有被废弃。你是如何判断它被忽略了的? - Fraser
可执行文件中没有调试符号,如果我添加了错误的命令,例如set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall lots of bad commands"),也没有效果。 - zenna
2
必读:http://www.cmake.org/pipermail/cmake/2008-September/023808.html - Alex Bitek
4个回答

5
您有一个拼写错误。您的代码中写着CMAKE_CSS_FLAGS_RELEASE。注意CSS,它应该是CXX

4
问题在于-D和变量之间必须有一个空格。也就是说,应该是这样的:
cmake -D CMAKE_BUILD_TYPE=Release -D UseFortran=True -D CMAKE_CXX_COMPILER=g++-4.6 ~/repos/cliques/cliques

1
不要忘记定义变量类型。来自CMake文档的写法是:-D <var>:<type>=<value> - Johannes S.
6
我从未在“-D”后面使用过空格。你确定你的CMAKE_CXX_FLAGS_DEBUG包含了“-g”吗?如果你重新使用了相同的构建目录,可能会重复使用变量缓存中的无效值。 - Mark
构建类型 RELEASERelease 是否等价? - nn0p
有没有一种方法可以在命令行中未定义 CMAKE_BUILD_TYPE 的情况下强制其定义? - Royi

2

我认为在之前的版本中,他们在CMAKE_BUILD_TYPE中犯了一个错别字。我们遇到了这个问题,这里是一行可以解决的代码。

cmake -D CMAKE_BUILD_TYPE:STRING=Debug ../src

您可以使用以下方式检查一切是否正常:

cmake -L ../src

使用此命令可能会给您正确命名变量CMAKE_BUILD_TYPE的方法。
祝好运。

1
为什么在创建构建文件夹时不使用-DCMAKE_BUILD_TYPE=Debug?Cmake构建Release类型项目或Debug类型项目,不能同时进行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接