CMake имеет интересную особенность в том, что он хранит кэш значений, которые вы в противном случае указали бы в командной строке ./configure для нестандартных расположений библиотеки.
Мой способ ведения дел следующий:
- если библиотека поставляется с установщиком, например, версией Windows OpenSSL, я установлю ее в рекомендованной папке, т.е. C: \ Program Files \ OpenSSL .
- если библиотека поставляется в виде zip-файла, я обычно распаковываю их в каталог C: \ dev , чтобы облегчить дальнейшую миграцию и сделать папки короче, чтобы их легче было найти.
Затем при компиляции моего проекта на основе CMake я запускаю графический инструмент для генерации файла CMakeCache.txt, не заботясь об ошибках, вызванных модулями FindXXX, которые не смогли найти мои внешние библиотеки.
Вместо этого я буду затем использовать графический интерфейс CMake для поиска каталогов, в которых расположены заголовочные файлы и файлы библиотек, и вручную устанавливать правильные папки. Пока кеш не удален, эти пути останутся в CMakeCache.txt, даже если файлы CMakeLists.txt изменены.
В некоторых случаях установленные библиотеки устанавливают переменные среды, которые модули CMake могут использовать для их поиска, например Boost (переменная BOOST_ROOT). Это позволяет очень легко использовать установленный Boost в Windows с CMake, как вы можете видеть здесь:
##### Boost libraries #####
include(FindBoost)
if(MSVC)
find_package(Boost 1.40.0 REQUIRED) # msvc autolink support means we don't specify libs
else(MSVC)
find_package(Boost 1.40.0 REQUIRED COMPONENTS system)
endif(MSVC)
include_directories(${Boost_INCLUDE_DIRS})
set(Boost_USE_STATIC_LIBS ON)
link_directories(${Boost_LIBRARY_DIRS})
Затем вы можете связать свои исполняемые файлы с Boost, выполнив следующее:
add_executable(program_example program_example.cpp)
target_link_libraries(program_example ${Boost_LIBRARIES})