gpt4 book ai didi

CMake -DCMAKE_CXX_COMPILER 有效但 SET(CMAKE_CXX_COMPILER ...) 被忽略?

转载 作者:行者123 更新时间:2023-12-04 03:27:50 24 4
gpt4 key购买 nike

一直在尝试使用我的工具链文件中的以下行将 CPP 编译器设置为 g++

# specify the cross compiler
SET(CMAKE_CXX_COMPILER:FILEPATH /opt/qnx641/host/linux/x86/usr/bin/arm-unknown-nto-qnx6.4.0-g++)

这似乎没有被使用,所以我尝试了一些东西只是为了起诉
SET(CMAKE_C_COMPILER:FILEPATH   /junk/gcc)

好吧,矫枉过正,但这样我绝对确定 CMake 不会从我传入的路径和命令结构中进行任何有趣的推断。

我通过查看讨论工具链文件的 CMake Cross Compiling page 沿着这条路线走下去。

因此,仔细阅读并决定从命令行执行此操作,因为 this QA thread 显示命令行 -D 将覆盖缓存的变量。

这有效!

所以我的问题是 ,有谁知道为什么当我不使用 -D 命令行选项时,CMake 如何找到我的交叉编译器路径和 exename 但忽略了我的工具链中的 SET(CMAKE_CXX_COMPILER... 行。

我在每次构建之前删除了 build 目录和 CMakeCache.txt 文件。

为了完整起见,我使用的命令行是
rm CMakeCache.txt; 
rm -fr build;
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=./build
-DMAKE_TOOLCHAIN_FILE=/path/to/toolchain-file.cmake
-C CMakeCrossCompile-TryRunResult-qnx-armle.cmake .

文件 CMakeCrossCompile-TryRunResult-qnx-armle.cmake 不包含 CMAKE_CXX_COMPILER

任何关于 giong 的线索都非常感谢!

我还使用了 -LA 命令行选项来查看正在使用的缓存变量,并且当命令 linne SET 不存在时,它绝对没有从 -D... 命令中获得正确的值...

编辑:我发现以下 CMake Support Request 建议使用环境变量,发现 via this SO thread

似乎在这个过程中使用 ToolChain 文件中的变量可能为时已晚?奇怪,因为它在上面链接的指南中显示了这种方法。任何人都可以确认/否认这一点吗?谢谢。

最佳答案

您只需将其设置为 CACHE 。对于 instance :

set(CMAKE_C_COMPILER gcc CACHE STRING "C compiler" FORCE)
set(CMAKE_CXX_COMPILER g++ CACHE STRING "C++ compiler" FORCE)

关于CMake -DCMAKE_CXX_COMPILER 有效但 SET(CMAKE_CXX_COMPILER ...) 被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762215/

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