如何从缓存/ CLion解决方法默认CMake环境变量

时间:2015-01-13 17:43:40

标签: cmake clion

我正在努力解决CLion无法处理环境变量的问题。

我的所有CMake文件都以这样的行开头:

cmake_minimum_required(VERSION 2.8.4)
include( $ENV{PROJECT_ROOT}/src/global_settings.cmake )
AssureOutOfSourceBuilds()

CLion不知道如何阅读提供全局包含的真实路径的环境变量。结果,CLion完全无法在当前目录之外找到任何内容,也无法抛出错误。

有没有办法在CMake的缓存中为环境变量指定默认值?我相信CLion正确地读取了CMake缓存。

关于如何解决目前CLion目前的弱点的其他任何建议?感谢。

3 个答案:

答案 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

CMake options: