2014-09-25 3 views
0

Я новичок в CMake, и в настоящее время я пытаюсь выяснить, как найти библиотеки, используя find_package(). Моя цель - найти библиотеку CryptoPP.
Когда я бегу CMake печатает:cmake: не удается найти библиотеку с find_package

CMake Error at my_app/CMakeLists.txt:66 (message): 
    Failed to find CryptoPP. 

Моя иерархия папок и файлов CMake приведены ниже. Итак, что случилось?

enter image description here

#==================================================================================== 
# my_app/my_app/cmake_modules/FindCryptopp.cmake ==================================== 
#==================================================================================== 

set(HDR_LIST sha.h 
      rsa.h 
      osrng.h 
      files.h 
      base32.h 
      randpool.h 
      default.h) 

set(LIB_LIST cryptlib.lib 
      cryptlibd.lib) 

# check that includes we need are present 
find_path(cryptopp_INCLUDE_DIR HDR_LIST PATHS ../../3rd_party_libs/cryptopp560) 

# check that libraries we need are present 
find_library(cryptopp_LIBRARIES LIB_LIST PATHS ../../3rd_party_libs/cryptopp560/win32/vc12 NO_DEFAULT_PATH) 

set(Cryptopp_FOUND TRUE) 

if (NOT cryptopp_INCLUDE_DIR) 
    set(Cryptopp_FOUND FALSE) 
endif (NOT cryptopp_INCLUDE_DIR) 

if (NOT cryptopp_LIBRARIES) 
    set(Cryptopp_FOUND FALSE) 
endif (NOT cryptopp_LIBRARIES) 

#==================================================================================== 
# my_app/my_app/CMakeLists.txt ====================================================== 
#==================================================================================== 
cmake_minimum_required(VERSION 3.0 FATAL_ERROR) 
cmake_policy(SET CMP0015 NEW) 

project("my_app") 
set(HDR_LIST foo.h) 
set(SRC_LIST foo.cpp 
      main.cpp) 

add_executable(my_app ${SRC_LIST} ${HDR_LIST}) 

target_link_libraries(my_app my_lib) 


set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules) 
find_package(Cryptopp) 

if (Cryptopp_FOUND) 
    message(STATUS "Includes for Cryptopp found in ${cryptopp_INCLUDE_DIR}") 
    message(STATUS "Libraries for Cryptopp found in ${cryptopp_LIBRARIES}") 
else() 
    message(FATAL_ERROR "Failed to find CryptoPP.") 
endif() 
+2

Вы не должны добавлять пути к find_path и find_library. Добавьте их в 'CMAKE_PREFIX_PATH', когда вы вызываете cmake. Вы не должны проверять весь список заголовков, но только для одного. Вы можете искать несколько имен, добавляя NAMES, но он будет искать одно имя из списка. То же самое верно для find_library. – usr1234567

+0

@ usr1234567 попробует сегодня ваше предложение. Но почему представленный подход не работает? Похоже, он полностью соответствует документации CMake. –

+2

Нет, это не так. Вы проверяете разные файлы, документация хочет проверить один файл, который может иметь разные имена. И вы пропустили 'NAMES' перед своим списком. – usr1234567

ответ

0

Для поиска альтернативного файла поместить NAMES в передней части списка. Разрешено только одно имя файла.

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