如题,在CLion中,如果更新了项目中某一个CMakeLists.txt文件或xxx.cmake文件,一般情况下CLion都会出现一个提示:
通常,点击Reload changes后,CLion即可重新读取CMake配置并更新。
然而,这个操作并不会更新保存在build/CMakeCache.txt中的CMake Cache变量!
我们来测试一下:
在CMakeLists.txt中写入:
option(FOO "Let's have a test" ON)
点击上方出现的提示中的Reload changes,打开build/CMakeCache.txt,可以找到:
//Let's have a test
FOO:BOOL=ON
嗯,说明这一次更新了CMakeCache.txt!
然鹅,我们修改CMakeLists.txt中的代码:
option(FOO "Let's have a test" OFF)
再次点击上方出现的提示中的Reload changes,再次打开build/CMakeCache.txt,可以再次找到:
//Let's have a test
FOO:BOOL=ON
(╯°Д°)╯︵ ┻━┻这不对啊!我已经给改成OFF了啊!怎么没变!
总结:Reload changes不靠谱。
这个时候有朋友要问了,怎么能让CMakeCache.txt中的变量也更新一下呢?
很简单!
删掉build文件夹下的内容再cmake ..
就好了!(bushi
咳咳,众所周知,CLion下方的工具栏中有一栏是CMake:
选中后左侧会有两个竖工具条,左边工具条的最下方是一个齿轮,点它!
会弹出这样一个菜单,我们选择最下方的Reset Cache and Reload Project,大功告成!
我们去build/CMakeCache.txt里看一眼:
//Let's have a test
FOO:BOOL=OFF
已经变成我们想要的形状内容了!
第二次总结:Reload changes也就图一乐,要想真正正确更新CMake配置还得是Reset Cache and Reload Project!
防杠备注:其实上述情况正是CMake Cache变量的特点,即将变量值缓存在build/CMakeCache.txt文件中,且该值不会随普通的set()
命令改变。在set()
中使用FORCE
选项也可以做到同步更新build/CMakeCache.txt文件中的变量值。