我正在尝试设置编译器标志的默认值,以后可以由用户使用-DCMAKE_CXX_FLAGS_RELEASE =“...”在命令行上进行更改。
如果我使用:
SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" )
使用命令行或ccmake无法更改标志。
如果我使用
SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" )
根本没有设置标志。
有没有正确的方法呢?
答案 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 )
...
它有效。我想如果你使用需要一些不同默认标志的编译器,这将是不好的。但是你不应该自己设置默认值。
我仍然想知道是否有更清洁的方式。