我按照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_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
变量本身没有空格。
答案 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变量相比,这不易出错。