Cmake更改破解版本
问题描述:
当我安装库时,它将转至${CMAKE_INSTALL_PREFIX}
。
当我find_package(
一个库,它搜索${CMAKE_INSTALL_PREFIX}
。Cmake更改破解版本
在窗口中,cmake 3.6${CMAKE_INSTALL_PREFIX}
默认为c:\Program Files
。这工作得很好。但在cmake 3.7${CMAKE_INSTALL_PREFIX}
默认为c:\Program Files\${PROJECT_NAME}
。
现在,当我安装库A
时,它转到C:\Program Files\A
。
当我从库B
库find_package(
库A
,它搜索C:\Program Files\B
。
现在我再也找不到我的依赖了。如果我需要指定安装的确切路径A
,那么我实在没有办法从find_package(
中得到任何东西了。我错过了什么吗?
答
根据documentation的find_package
,您可以使用PATH_SUFFIXES
来做到这一点。
举个例子,你可以使用这样的事情从B
:
find_package(A REQUIRED PATH_SUFFIXES A)
否则,你可以为A
改变CMAKE_INSTALL_PREFIX
,因为它遵循:
if(WIN32)
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX " C:\Program Files" CACHE PATH "..." FORCE)
endif()
endif()
进一步详情,请参阅here。
什么是路径(相对于安装前缀)到'* Config.cmake'文件库* A *?默认情况下'find_package()'不会在'$ {CMAKE_INSTALL_PREFIX}'下搜索;你明确指定这个目录吗? – Tsyvarev
@Tsyvarev'find_package(A)'运行'FindA.cmake',它是'$ {CMAKE_MODULE_PATH}'中的一个文件。这些通常由libA提供,并使用'find_path(PATHS $ {CMAKE_INSTALL_PREFIX})'。 – Stewart
该代码和描述改变了很多情况:我期望'find_package'的* config *模式用于查找库,而不是**模块**模式。看起来@skypjack在他的回答中假设是相同的:选项* PATH_SUFFIXES *仅用于* config *模式。顺便说一下,当您使用CMake构建并安装'A'库时,为什么不提供带有该安装的'* Config.cmake'?通常,在为包提供'* Config.cmake'时,使用'Find * .cmake'脚本是不可能的。无论如何,请将您的评论**中的信息添加到问题本身**:正如我所说的那样,这是有意义的。 – Tsyvarev