我正在与CMake交叉编译一个项目。 find_library
找不到位于${CMAKE_INSTALL_PREFIX}/lib
中的库,因为没有按照documentation的要求将CMAKE_INSTALL_PREFIX
附加到CMAKE_SYSTEM_PREFIX_PATH
。>
这是因为我在工具链文件中将CMAKE_SYSTEM_NAME
设置为Generic
。我将工具链文件简化为该单个命令。为什么它会影响CMAKE_INSTALL_PREFIX
的行为?
如果我将CMAKE_SYSTEM_NAME
设置为Linux
或Windows
,则CMAKE_SYSTEM_PREFIX_PATH
有一些预设,并且还会按预期附加CMAKE_INSTALL_PREFIX
。
答案 0 :(得分:0)
我认为此处的文档有误。不会自动将CMAKE_INSTALL_PREFIX
添加到CMAKE_SYSTEM_PREFIX_PATH
。这是在Windows和Linux平台特有的CMake模块内完成的(例如,计算机上的c:\ Program Files \ CMake \ share \ cmake-3.14 \ Modules \ Platform \ WindowsPaths.cmake)。
要在非Windows和非Linux平台上模仿相同的行为,可以执行以下操作。在工具链文件中,定义唯一的系统名称,并将当前目录添加到CMAKE_MODULE_PATH
,以便Cmake在此处查找模块:
set(CMAKE_SYSTEM_NAME "MySystem")
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
然后在名为<CMAKE_SYSTEM_NAME>.cmake
的子文件夹(例如Platform
)中创建名为Platform\MySystem.cmake
的平台文件。在此文件中,您可以将CMAKE_INSTALL_PREFIX
附加到CMAKE_SYSTEM_PREFIX_PATH
:
# Copied from c:\Program Files\CMake\share\cmake-3.14\Modules\Platform\WindowsPaths.cmake
if (NOT CMAKE_FIND_NO_INSTALL_PREFIX)
list(APPEND CMAKE_SYSTEM_PREFIX_PATH
# Project install destination.
"${CMAKE_INSTALL_PREFIX}"
)
if(CMAKE_STAGING_PREFIX)
list(APPEND CMAKE_SYSTEM_PREFIX_PATH
# User-supplied staging prefix.
"${CMAKE_STAGING_PREFIX}"
)
endif()
endif()