cmake缓存变量在某些更改时被删除 我有一部分代码> cMAKLISTH.TXT < /COD>设置C++标准: if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 11) endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF)

cmake缓存变量在某些更改时被删除 我有一部分代码> cMAKLISTH.TXT < /COD>设置C++标准: if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 11) endif() set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF),cmake,Cmake,这似乎很好用。。。大部分。我有一个构建目录,通过以下方式设置: $ cmake -G Ninja -DCMAKE_CXX_COMPILER=$(which clang++) -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_CXX_STANDARD=17 ../gw3 在叮当声上建立我的项目,修复了一些事情,正常的工作。然后我想检查是否破坏了gcc构建,因此,在同一目录中,我运行: $ cmake -G Ninja -DCMAKE_C

这似乎很好用。。。大部分。我有一个构建目录,通过以下方式设置:

$ cmake -G Ninja -DCMAKE_CXX_COMPILER=$(which clang++) -DCMAKE_BUILD_TYPE=Release \
                 -DCMAKE_CXX_STANDARD=17  ../gw3
在叮当声上建立我的项目,修复了一些事情,正常的工作。然后我想检查是否破坏了gcc构建,因此,在同一目录中,我运行:

$ cmake -G Ninja -DCMAKE_CXX_COMPILER=$(which g++) -DCMAKE_BUILD_TYPE=Release \
                 -DCMAKE_CXX_STANDARD=17  ../gw3
这产生了:

-- Configuring done
You have changed variables that require your cache to be deleted.
Configure will be re-run and you may have to reset some variables.
The following variables have changed:
CMAKE_CXX_COMPILER= /path/to/bin/g++
CMAKE_CXX_COMPILER= /path/to/bin/g++
CMAKE_CXX_COMPILER= /path/to/bin/g++
CMAKE_CXX_COMPILER= /path/to/bin/g++
... like 20 more times ...

-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 7.2.0
... more cmake stuff here ...

但此时,缓存中的
CMAKE\u CXX\u STANDARD
设置为
11
!为什么?我在命令行中将其设置为17。如果我再次重新运行相同的
cmake
命令(逐字,只需向上箭头,输入),那么
cmake\u CXX\u STANDARD
变量将根据需要设置为
17
。给出了什么?

避免此错误的常规方法是通过环境变量设置编译器,即:

$ CXX=clang++ cmake .. -DCMAKE_CXX_STANDARD=17
# ...
$ cat CMakeCache.txt | grep STANDARD
CMAKE_CXX_STANDARD:STRING=17
$ env CXX=g++ cmake .. -DCMAKE_CXX_STANDARD=17
# ...
$ cat CMakeCache.txt | grep STANDARD
CMAKE_CXX_STANDARD:STRING=17 
当您试图更改
CMake\u CXX\u编译器时,CMake不喜欢它。从:

我在GUI中更改了CMAKE_C_编译器,但在下一个配置步骤中又会更改。为什么? 一旦使用给定的编译器创建了生成树,它就不能 改变。实现这一点有多种原因 政策


避免此错误的常规方法是通过环境变量设置编译器,即:

$ CXX=clang++ cmake .. -DCMAKE_CXX_STANDARD=17
# ...
$ cat CMakeCache.txt | grep STANDARD
CMAKE_CXX_STANDARD:STRING=17
$ env CXX=g++ cmake .. -DCMAKE_CXX_STANDARD=17
# ...
$ cat CMakeCache.txt | grep STANDARD
CMAKE_CXX_STANDARD:STRING=17 
当您试图更改
CMake\u CXX\u编译器时,CMake不喜欢它。从:

我在GUI中更改了CMAKE_C_编译器,但在下一个配置步骤中又会更改。为什么? 一旦使用给定的编译器创建了生成树,它就不能 改变。实现这一点有多种原因 政策


CXX=g++cmake..
cmake-DCMAKE\u CXX\u COMPILER=g++..
之间有实际区别吗?您是否在两次cmake运行之间清理了cmake缓存?从引用的FAQ部分中,我的期望是,只要您从头开始配置,这应该适用于环境变量和
-DCMAKE\u C\u编译器
方法,但是,如果您尝试在现有配置上切换编译器,您可能会遇到麻烦。
CXX=g++cmake..
cmake-DCMAKE\u CXX\u COMPILER=g++..
之间有实际区别吗?您是否在两次cmake运行之间清理了cmake缓存?从引用的FAQ部分中,我的期望是,只要您从头开始配置,就可以使用环境变量和
-DCMAKE_C_编译器
方法,但如果您尝试在现有配置上切换编译器,则可能会遇到麻烦。