Я пытаюсь построить проект с многочисленными зависимостями, такими как Boost, OpenSSL и C ++ REST SDK.Тем не менее, требуется, чтобы исходный код был включен в рабочую область проекта и чтобы библиотека была построена из указанного исходного кода.
Наиболее последовательный успешный способ достижения этой цели - это использование * 1003.*, add_subdirectory
, target_link_libraries
и некоторые умные проекты, созданные для этой цели, такие как boost-cmake и openssl-cmake .
Возьмем, к примеру, следующую структуру проекта:
prjct
| include/
| libs/
| | boost-cmake/
| | openssl-cmake/
| | cpprestsdk/
| src/
| tests/
| CMakeLists.txt
, для которой CMakeLists.txt верхнего уровня будет содержать:
...
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libs/boost-cmake)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libs/openssl-cmake)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libs/cpprestsdk)
target_link_libraries(${PROJECT_NAME_L}
PUBLIC
Boost::system
Boost::thread
Boost::log
Boost::program_options
Boost::chrono
ssl # OpenSSL::SSL
crypto # OpenSSL::Crypto
cpprestsdk::cpprest
)
...
Однако в случаеВ библиотеке cpprestsdk я получаю следующую ошибку при запуске cmake ..
из build/
:
CMake Error at CMakeLists.txt:55 (add_library):
Target "prjct" links to target "cpprestsdk::cpprest" but the target
was not found. Perhaps a find_package() call is missing for and IMPORTED
target, or an ALIAS target is missing?
Как я могу связать и использовать C ++ REST SDK в этих ограничениях?