2016-12-01 2 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.
Когда я find_package( библиотека A из библиотеки B, она ищет C:\Program Files\B.

Теперь я больше не могу найти свою зависимость. Если мне нужно указать точный путь, на который был установлен A, я больше ничего не получаю от find_package(. Я что-то упускаю?

+0

Каков путь (относительно установочного префикса) к файлу '* Config.cmake' для библиотеки * A *? По умолчанию 'find_package()' не выполняет поиск в '$ {CMAKE_INSTALL_PREFIX}'; Вы явно указываете этот каталог? – Tsyvarev

+0

@ Цыварев 'find_package (A)' работает 'FindA.cmake', который является файлом в' $ {CMAKE_MODULE_PATH} '. Они часто предоставляются libA и используют 'find_path (PATHS $ {CMAKE_INSTALL_PREFIX})'. – Stewart

+0

Этот код и описание сильно меняют ситуацию: я ожидал, что * config * mode 'find_package' используется для поиска библиотеки, а не ** модуля **. Похоже, что @skypjack в его ответе предполагает одно и то же: опция * PATH_SUFFIXES * предназначена только для * config *. Кстати, когда вы используете CMake для сборки и установки библиотеки 'A', почему бы не предоставить' * Config.cmake' эту установку? Обычно скрипты 'Find * .cmake' используются, когда предоставление' * Config.cmake' для пакета невозможно. В любом случае, добавьте информацию из вашего комментария ** в сам вопрос. **: как я уже сказал, это имеет смысл. – Tsyvarev

ответ

1

В соответствии с documentation от find_package, вы можете использовать PATH_SUFFIXES для этого.

В качестве примера, вы можете использовать что-то вроде этого из B:

find_package(A REQUIRED PATH_SUFFIXES A) 

В противном случае вы можете изменить CMAKE_INSTALL_PREFIX для A как это следующим образом:

if(WIN32) 
    if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 
     set(CMAKE_INSTALL_PREFIX " C:\Program Files" CACHE PATH "..." FORCE) 
    endif() 
endif() 

См here для получения более подробной информации.

Смежные вопросы