2016-12-01 64 views
1

当我安装库时,它将转至${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
当我从库Bfind_package(A,它搜索C:\Program Files\B

现在我再也找不到我的依赖了。如果我需要指定安装的确切路径A,那么我实在没有办法从find_package(中得到任何东西了。我错过了什么吗?

+0

什么是路径(相对于安装前缀)到'* Config.cmake'文件库* A *?默认情况下'find_package()'不会在'$ {CMAKE_INSTALL_PREFIX}'下搜索;你明确指定这个目录吗? – Tsyvarev

+0

@Tsyvarev'find_package(A)'运行'FindA.cmake',它是'$ {CMAKE_MODULE_PATH}'中的一个文件。这些通常由libA提供,并使用'find_path(PATHS $ {CMAKE_INSTALL_PREFIX})'。 – Stewart

+0

该代码和描述改变了很多情况:我期望'find_package'的* config *模式用于查找库,而不是**模块**模式。看起来@skypjack在他的回答中假设是相同的:选项* PATH_SUFFIXES *仅用于* config *模式。顺便说一下,当您使用CMake构建并安装'A'库时,为什么不提供带有该安装的'* Config.cmake'?通常,在为包提供'* Config.cmake'时,使用'Find * .cmake'脚本是不可能的。无论如何,请将您的评论**中的信息添加到问题本身**:正如我所说的那样,这是有意义的。 – Tsyvarev

回答

1

根据documentationfind_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