2013-07-02 1 views
0

У меня есть несколько библиотек, которые я строю последовательно. Некоторые зависят от других. Например:Как добавить CMAKE_INSTALL_PREFIX, когда он предоставлен во время сборки?

libfoo.so зависит от libbar.so

И я не хочу, чтобы развернуть эти вещи в масштабах всей системы на строительной машине. В моем файле Cmake у меня есть что-то вроде следующего:

find_library(FOO_LIB foo /usr/lib64 /usr/lib /usr/local/lib) 

На строительной машине я обычно дать ему CMAKE_INSTALL_PREFIX флаг во время компиляции. Есть ли способ сделать что-то вроде этого:

find_library(FOO_LIB foo ${CMAKE_INSTALL_PREFIX}/lib /usr/lib64 /usr/lib /usr/local/lib) 

если флаг предоставляется, но и использовать первый вариант, если это не предусмотрено?

пожалуйста, прости мою noobish-ность по отношению к Cmake

[уточнение] Каждая библиотека построена отдельным файлом CMakeLists.txt.

+0

Если обе библиотеки построены одними и теми же cmakelists, вам не нужен вызов find_library. Вместо этого вы можете использовать target_link_libraries (foo bar) –

ответ

0

Если у вас есть один CMake-проект, который включают в себя другие CMake-проекты (с библиотеками и приложениями), вы можете использовать целевые имена, чтобы связать библиотеки: target_link_libraries(app foo bar)

Если вы строите свой проект библиотеки Cmake отдельно - это не хороший способ, я думаю, но у вас все еще есть два варианта:

  • развертывание ваших библиотек перед сборкой приложения;
  • положить уже построенные библиотеки в каталог third_party и найти их (например, написать конкретный файл FindXXXX.cmake, который сначала попытается найти ваши библиотеки в каталоге third_party).