CMake:以用户可以更改的方式设置编译器标志。
我正在尝试设置编译器标志的默认值,用户稍后可以使用命令行上的-DCMAKE_CXX_flags_RELEASE=“…”和类似命令更改编译器标志 如果我使用:CMake:以用户可以更改的方式设置编译器标志。,cmake,Cmake,我正在尝试设置编译器标志的默认值,用户稍后可以使用命令行上的-DCMAKE_CXX_flags_RELEASE=“…”和类似命令更改编译器标志 如果我使用: SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" ) 不能使用命令行或ccmake更改than标志 如果我使用 SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" ) than标志根本
SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" )
不能使用命令行或ccmake更改than标志
如果我使用
SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" )
than标志根本没有设置
有什么正确的方法可以做到这一点吗?所以,通过实验,我发现了这一点(某种程度上) 首先,我发现缓存版本不起作用,因为缓存中已经存在值。也就是说,如果我在它的末端施加力,它就会被设置:
SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" FORCE )
显然,这将不允许用户自己指定标志,使其等同于第一个选项
解决方案是:
将cache setting命令放在cmake文件的开头(在project命令之前),这会在cmake内部设置值之前设置值。现在看起来是这样的:
SET( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" )
SET( CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG -DNVALGRIND" CACHE STRING "" )
...
project( whatever )
...
它是有效的。我想如果您使用需要一些不同默认标志的编译器,这将是不好的。但是无论如何,你不应该自己设置默认值
我仍然想知道是否有更干净的方法。刚刚发现存在像CMAKE_CXX_flags_RELEASE_INIT这样的标志,但它们也没有按照我想要的方式工作(如果它们放在CMakeLists.txt中,似乎根本不会影响默认值)。问题是在项目()之前没有设置像MSVC这样的检查编译器的变量呼叫