首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强迫find_program无视CMAKE_SYSROOT

强迫find_program无视CMAKE_SYSROOT
EN

Stack Overflow用户
提问于 2021-07-07 09:30:30
回答 1查看 406关注 0票数 1

我正在使用cmake交叉编译STM32MP157。

我写了一个工具链文件。有关摘要如下:

代码语言:javascript
复制
set(OSTL_TARGET_SYSROOT /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi)
set(OSTL_HOST_TOOLS /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/sysroots/x86_64-ostl_sdk-linux)

set(STM32_TARGET_TRIPLET "arm-ostl-linux-gnueabi")
set(CMAKE_SYSROOT ${OSTL_TARGET_SYSROOT})
set(CMAKE_PROGRAM_PATH /usr/bin)
LIST(APPEND CMAKE_PROGRAM_PATH  ${OSTL_HOST_TOOLS}/usr/bin )

find_program(CMAKE_AR NAMES ${STM32_TARGET_TRIPLET}-ar PATHS ${CMAKE_PROGRAM_PATH} NO_DEFAULT_PATH)

这将导致从目标sysroot加载CMAKE_AR,而不是从${OSTL_HOST_TOOLS}/usr/bin目录加载。

如何强迫find_program只查看给定的路径,而不是任何默认目录?,我已经尝试了"NO_DEFAULT_PATH“选项。但不起作用。

如果我更改程序的顺序,以便稍后设置CMAKE_SYSROOT,它就能工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-07 18:33:01

只需将NO_CMAKE_FIND_ROOT_PATH参数添加到find_program调用即可。

代码语言:javascript
复制
find_program(
  CMAKE_AR 
  NAMES ${STM32_TARGET_TRIPLET}-ar 
  PATHS ${CMAKE_PROGRAM_PATH} 
  NO_DEFAULT_PATH
  NO_CMAKE_FIND_ROOT_PATH
)

从医生那里:

-- CMAKE_SYSROOT变量也可以用于指定一个要用作前缀的目录。设置CMAKE_SYSROOT还会产生其他影响。有关更多信息,请参见该变量的文档。

当交叉编译指向目标环境的根目录时,这些变量尤其有用,CMake也会在那里搜索。默认情况下,首先搜索CMAKE_FIND_ROOT_PATH中列出的目录,然后搜索CMAKE_SYSROOT目录,然后搜索非根目录。可以通过设置CMAKE_FIND_ROOT_PATH_MODE_PROGRAM来调整默认行为。可以在每次调用的基础上使用选项手动重写此行为:

..。

NO_CMAKE_FIND_ROOT_PATH

不要使用CMAKE_FIND_ROOT_PATH变量。

https://cmake.org/cmake/help/latest/command/find_program.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68283446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档