CMake:以可由用户更改的方式设置编译器标志。

时间:2013-09-14 13:02:16

标签: cmake

我正在尝试设置编译器标志的默认值,以后可以由用户使用-DCMAKE_CXX_FLAGS_RELEASE =“...”在命令行上进行更改。

如果我使用:

SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" )
使用命令行或ccmake无法更改

标志。

如果我使用

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

根本没有设置标志。

有没有正确的方法呢?

1 个答案:

答案 0 :(得分:3)

所以,通过实验,我想出了这个(有点)。

首先我发现CACHE版本不起作用,因为缓存中已有值。也就是说,如果我在结尾处申请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 )
...

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

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