我正在努力解决CLion无法处理环境变量的问题。
我的所有CMake文件都以这样的行开头:
cmake_minimum_required(VERSION 2.8.4)
include( $ENV{PROJECT_ROOT}/src/global_settings.cmake )
AssureOutOfSourceBuilds()
CLion不知道如何阅读提供全局包含的真实路径的环境变量。结果,CLion完全无法在当前目录之外找到任何内容,也无法抛出错误。
有没有办法在CMake的缓存中为环境变量指定默认值?我相信CLion正确地读取了CMake缓存。
关于如何解决目前CLion目前的弱点的其他任何建议?感谢。
答案 0 :(得分:4)
事实证明,Clion在CMake的缓存方面有一些不寻常的行为。至少在我的所有测试中,每当我设置它时,Clion都会重置或清除缓存变量(PROJECT_ROOT,上面),因此@ sakra的解决方案不可靠。我仍然投票给他的答案是对他的所有努力都公平。
但是,我终于在这里找到了解决这个问题的方法:https://youtrack.jetbrains.com/issue/CPP-188#comment=27-899992
当Clion调用CMake时,实际设置环境变量是一个技巧。以下是该链接的内容:
对于需要通过环境或者环境的人来说,这是一个丑陋的解决方法 在EAP build 140.1221.2中通过-D设置缓存变量。在偏好中 - >构建,执行,部署 - >工具链,将CMake可执行文件从捆绑的CMake可执行文件更改为shell脚本 定义哪个调用已安装的实际CMake可执行文件。
使用Bash shell,它可能如下所示:
#!/bin/sh
export SOMEPATH=/path/you/need
/usr/local/bin/cmake "$@"
答案 1 :(得分:2)
如果CLion正确读取CMake缓存,您可以尝试进行以下解决方法:
if (DEFINED ENV{PROJECT_ROOT})
set (PROJECT_ROOT "$ENV{PROJECT_ROOT}" CACHE PATH "project root" FORCE)
endif()
include( ${PROJECT_ROOT}/src/global_settings.cmake )
set
命令使用环境变量的值创建缓存变量。然后可以将缓存变量用作$ENV{...}
表达式的替代。 FORCE
选项可确保缓存变量与环境变量的值保持同步(如果已设置)。
答案 2 :(得分:2)
根据建议here,自CLion 1.0起,const options = {
items: 4,
};
可以directly pass CMake options。