0
Я новичок в CMake, и в настоящее время я пытаюсь выяснить, как найти библиотеки, используя find_package(). Моя цель - найти библиотеку CryptoPP.
Когда я бегу CMake печатает:cmake: не удается найти библиотеку с find_package
CMake Error at my_app/CMakeLists.txt:66 (message):
Failed to find CryptoPP.
Моя иерархия папок и файлов CMake приведены ниже. Итак, что случилось?
#====================================================================================
# 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()
Вы не должны добавлять пути к find_path и find_library. Добавьте их в 'CMAKE_PREFIX_PATH', когда вы вызываете cmake. Вы не должны проверять весь список заголовков, но только для одного. Вы можете искать несколько имен, добавляя NAMES, но он будет искать одно имя из списка. То же самое верно для find_library. – usr1234567
@ usr1234567 попробует сегодня ваше предложение. Но почему представленный подход не работает? Похоже, он полностью соответствует документации CMake. –
Нет, это не так. Вы проверяете разные файлы, документация хочет проверить один файл, который может иметь разные имена. И вы пропустили 'NAMES' перед своим списком. – usr1234567