3

我正在尝试以用户稍后可以在命令行上使用 -DCMAKE_CXX_FLAGS_RELEASE="..." 和类似方式更改的方式为编译器标志设置默认值。

如果我使用:

SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" )

不能使用命令行或 ccmake 更改标志。

如果我使用

SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" )

根本没有设置标志。

有什么正确的方法可以做到这一点吗?

4

1 回答 1

3

所以,通过实验,我发现了这一点(有点)。

首先我发现缓存版本不起作用,因为缓存中已经存在值。也就是说,如果我在它的末尾应用 FORCE,它就会被设置:

SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" FORCE )

显然这不允许用户自己指定标志,使其等同于第一个选项。

解决方案是:

将缓存设置命令放在 cmake 文件的开头(在项目命令之前),以某种方式在 cmake 内部设置它们之前设置值。所以现在它看起来像这样:

SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" )
SET( CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" )
...
project( whatever )
...

它有效。我想如果您使用需要一些不同默认标志的编译器,这会很糟糕。但是你不应该自己设置默认值。

我仍然想知道是否有更清洁的方法。

于 2013-09-14T17:53:36.947 回答