2016-12-01 60 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