为什么CMake会忽略导出的CXX和CC环境变量?

时间:2016-06-13 10:48:37

标签: cmake

我按照CMake FAQ's

中的说明运行了这样的CMake(3.4.3)
export CC="cc_args.py $PWD/../bin/gcc"
export CXX="cc_args.py $PWD/../bin/g++"
cmake -DCMAKE_BUILD_TYPE=Debug ..

但是,当我打印CMAKE_CXX_COMPILERCMAKE_C_COMPILER时,它仍指向/usr/bin中系统的默认编译器。它只适用于我明确读入这样的环境变量:

IF (NOT $ENV{CC} STREQUAL "")
  SET(CMAKE_C_COMPILER $ENV{CC})
ENDIF ()
IF (NOT $ENV{CXX} STREQUAL "")
  SET(CMAKE_CXX_COMPILER $ENV{CXX})
ENDIF ()

但即使这样,建筑也会因此消息而失败:

/bin/sh: 1: /home/peterg/bin/cc_args.py /home/peterg/Code/build/../bin/g++: not found

但是我确信所有路径都是正确的,因为只执行两个冒号之间的路径按预期输出:

g++: fatal error: no input files
compilation terminated.

更新

编译过程似乎不喜欢编译器路径中的空格。我现在创建了两个脚本(一个用于GCC,一个用于CC),它们包装命令并传播参数,这似乎有效。但似乎我仍然在做一些根本性错误的事情,因为CMake也不会接受导出的CC=proxy_script_cc.shGCC=proxy_script_gcc.sh变量本身没有空格。

2 个答案:

答案 0 :(得分:5)

将我的评论转化为答案

<强>问题

我已经尝试过代码,可以重现您的问题

CMake Error at [...]/cmake-3.5/Modules/CMakeDetermineCXXCompiler.cmake:56 (message):
  Could not find compiler set in environment variable CXX:

  cc_args.py [... PWD ...]/../bin/g++.

如果我查看CMakeDetermineCXXCompiler.cmake代码和get_filename_component()文档,则表示它未在&#34;系统搜索路径&#34;中找到cc_args.py。或相对于二进制输出目录。

<强>解决方案

所以当你给出二进制输出目录的完整路径或相对路径时,它确实有用

export CC="../cc_args.py ../bin/gcc"
export CXX="../cc_args.py ../bin/g++"

<强>替代

CMake允许定义&#34;启动脚本&#34;例如CMAKE_<LANG>_COMPILER_LAUNCHER

$ cmake -DCMAKE_BUILD_TYPE=Debug 
        -DCMAKE_C_COMPILER_LAUNCHER=../cc_args.py 
        -DCMAKE_CXX_COMPILER_LAUNCHER=../cc_args.py 
        ..

<强>参考

答案 1 :(得分:0)

-DCMAKE_CXX_COMPILER=<path/to/compiler>传递给您的CMake电话。与摆弄shell变量相比,这不易出错。