【发布时间】:2016-10-13 18:09:27
【问题描述】:
我正在运行这样的 CMake (3.4.3),如 CMake FAQ's 中所述:
export CC="cc_args.py $PWD/../bin/gcc"
export CXX="cc_args.py $PWD/../bin/g++"
cmake -DCMAKE_BUILD_TYPE=Debug ..
但是,当我打印CMAKE_CXX_COMPILER 和CMAKE_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.sh 和 GCC=proxy_script_gcc.sh 变量本身没有空格。
【问题讨论】:
-
只用
-DCMAKE_CXX_COMPILER,不要乱用shell变量。 -
我认为您要搜索的内容类似于
set_directory_properties(PROPERTIES RULE_LAUNCH_COMPILE "bash proxy_script_cc.sh")或全局变量CMAKE_<LANG>_COMPILER_LAUNCHER -
@Florian
cc_args.py脚本封装了编译器以提取自动完成信息。 -
对我来说,CMake 在 Windows 上会忽略
ENV{CC},但在 CentOS 上不会。在这两种情况下,GCC 的路径中都没有空格。
标签: cmake