我正在使用cmake交叉编译STM32MP157。
我写了一个工具链文件。有关摘要如下:
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,它就能工作。
发布于 2021-07-07 18:33:01
只需将NO_CMAKE_FIND_ROOT_PATH参数添加到find_program调用即可。
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
https://stackoverflow.com/questions/68283446
复制相似问题