我正在运行CMake(3.4.3),如CMake FAQ中所述:
export CC="cc_args.py $PWD/../bin/gcc"
export CXX="cc_args.py $PWD/../bin/g++"
cmake -DCMAKE_BUILD_TYPE=Debug ..
Run Code Online (Sandbox Code Playgroud)
然而,当我打印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 ()
Run Code Online (Sandbox Code Playgroud)
但即使这样,建筑也会因此消息失败:
/bin/sh: 1: /home/peterg/bin/cc_args.py /home/peterg/Code/build/../bin/g++: not found
Run Code Online (Sandbox Code Playgroud)
但是我确信所有路径都是正确的,因为只执行两个冒号之间的路径按预期输出:
g++: fatal error: no input files
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
似乎编译过程不喜欢编译器路径中的空格.我现在创建了两个脚本(一个用于GCC,一个用于CC),它们包装命令并传播参数,这似乎有效.但似乎我仍然在做一些根本性的错误,因为CMake本身也不会接受导出的变量CC=proxy_script_cc.sh和GCC=proxy_script_gcc.sh没有空格的变量.
将我的评论转化为答案
问题
我试过给你代码,可以重现你的问题
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++.
Run Code Online (Sandbox Code Playgroud)
如果我查看CMakeDetermineCXXCompiler.cmake代码和get_filename_component()文档,它只是意味着它没有cc_args.py在"系统搜索路径"或相对于二进制输出目录中找到.
解
所以当你给出二进制输出目录的完整路径或相对路径时,它确实有效
export CC="../cc_args.py ../bin/gcc"
export CXX="../cc_args.py ../bin/g++"
Run Code Online (Sandbox Code Playgroud)
替代
CMake允许定义"启动器脚本",例如 CMAKE_<LANG>_COMPILER_LAUNCHER
$ cmake -DCMAKE_BUILD_TYPE=Debug
-DCMAKE_C_COMPILER_LAUNCHER=../cc_args.py
-DCMAKE_CXX_COMPILER_LAUNCHER=../cc_args.py
..
Run Code Online (Sandbox Code Playgroud)
参考
| 归档时间: |
|
| 查看次数: |
16491 次 |
| 最近记录: |