gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:33:02 26 4
gpt4 key购买 nike

我正在像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变量,而没有空格。

最佳答案

把我的评论变成答案

问题

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

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() 文档,那仅意味着它没有在“系统搜索路径”中或相对于您的二进制输出目录中找到 cc_args.py

解决方案

因此,当您使用以下内容为二进制输出目录提供完整路径或相对路径时,它确实可以工作
export CC="../cc_args.py ../bin/gcc"
export CXX="../cc_args.py ../bin/g++"

替代

CMake确实允许定义“启动脚本”,例如与 CMAKE_<LANG>_COMPILER_LAUNCHER
$ cmake -DCMAKE_BUILD_TYPE=Debug 
-DCMAKE_C_COMPILER_LAUNCHER=../cc_args.py
-DCMAKE_CXX_COMPILER_LAUNCHER=../cc_args.py
..

引用
  • How to Use CCache with CMake?
  • Save and reprint warnings for successfully-compiled files on subsequent builds?
  • 关于cmake - 为什么CMake会忽略导出的CXX和CC环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37787796/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com