Я портирую проект Windows на CentOS Linux, который использует cpprestsdk. Я использую vcpkg в Windows, и я подумал, что буду использовать vcpkg (и cmake), чтобы вводить и создавать пакеты и «открывать» библиотеки и файлы заголовков для моего проекта. Последовательность не позволяет получить "известный" моему источнику файл заголовка пакета. Вот что я сделал.
$ vcpkg install boost cpprestsdk
$ vcpkg integrate install
Applied user-wide integration for this vcpkg root.
CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake"
$ cd <source>
$ vi CMakeLists.txt
cmake_minimum_required(VERSION 2.8.9)
project(Domain)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -I../ ")
file(GLOB SOURCES "*.cpp")
#Generate the shared library from the sources
add_library(Domain SHARED ${SOURCES})
install(TARGETS Domain DESTINATION ../lib)
$ cmake -DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake -G "Unix Makefiles" .
$ make
[ 7%] Building CXX object CMakeFiles/Domain.dir/BaseDataFactory.cpp.o
In file included from /src/Domain/stdafx.h:4:0,
from /src/Domain/BaseDataFactory.cpp:1:
../Common/Common.h:75:26: fatal error: cpprest/json.h: No such file or directory
#include <cpprest/json.h>
Добавив параметр файла цепочки инструментов vcpkg в cmake, я подумал, что он должен позаботиться о раскрытии всех путей пакетов (lib / header) и записать их в выходной файл Makefile?
Я пробовал добавить
find_package(cpprestsdk REQUIRED)
Потом я получил кучу новых ошибок:
CMake Error at CMakeLists.txt:7 (find_package):
Could not find a package configuration file provided by "cpprestsdk" with
any of the following names:
cpprestsdkConfig.cmake
cpprestsdk-config.cmake
cpprestConfig.cmake
cpprest-config.cmake
cpprestsdk-config.cmake существует в корневом каталоге vcpkg, и я определенно могу видеть вызывающий ошибку файл заголовка для пакета в корневом каталоге vcpkg, но почему в Makefile, созданном cmake, нет всего, что нужно для создания? Нужно ли каким-либо образом вручную включать каждый пакет в vcpkg в файл CMakeLists.txt?
vcpkg
не автоматически добавляет каталоги включения в компилятор и не связывает автоматически библиотеки для каждого исполняемого файла, который вы создаете. Вместо этого он добавляет в среду CMake каталоги, в которых файлы конфигурации или сценарии поиска можно найти с помощьюfind_package()
. То естьfind_package(cpprestsdk REQUIRED)
необходимо для работы сcpprestsdk
. Все эти файлы существуют в корневом каталоге vcpkg - возможно, вы имеете в виду, что существует толькоcpprestsdk-config.cmake
файл. Другие имена являются альтернативными именами для файла конфигурации CMake, который следует соглашениям CMake. - person Tsyvarev   schedule 29.04.2019find_package()
должен работать. Я не знаю, почему это не работает в вашем случае, и согласен, что это выглядит странно. - person Tsyvarev   schedule 29.04.2019