Невозможно собрать проект cmake в Visual Studio и vcpkg (фатальная ошибка C1083)

Сегодня я установил vcpkg, включил интеграцию с Visual Studio, т. Е. \ Vcpkg integrate install, и начал установку библиотек.

Я в основном установил cpprestsdk, и это вызывает установку библиотек наддува. Затем я открыл проект в Visual Studio (CMake).

Когда я установил cpprestsdk, я получил это сообщение:

The package cpprestsdk:x86-windows provides CMake targets:

find_package(cpprestsdk REQUIRED)
# Note: 1 targets were omitted
target_link_libraries(main PRIVATE cpprestsdk::cpprest cpprestsdk::cpprestsdk_boost_internal cpprestsdk::cpprestsdk_zlib_internal cpprestsdk::cp
prestsdk_openssl_internal)

The package cpprestsdk:x64-windows provides CMake targets:

find_package(cpprestsdk REQUIRED)
# Note: 1 targets were omitted
target_link_libraries(main PRIVATE cpprestsdk::cpprest cpprestsdk::cpprestsdk_boost_internal cpprestsdk::cpprestsdk_zlib_internal cpprestsdk::cp
prestsdk_openssl_internal)

Так что мой CMakeLists.txt

cmake_minimum_required (VERSION 2.8)

project(CppRestSwaggerClient)

#find_package(Boost REQUIRED)

# THE LOCATION OF OUTPUT BINARIES
set(CMAKE_LIBRARY_DIR ${PROJECT_SOURCE_DIR}/lib)
set(LIBRARY_OUTPUT_PATH ${CMAKE_LIBRARY_DIR})

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()# Update require components as necessary
#find_package(Boost 1.45.0 REQUIRED COMPONENTS ${Boost_THREAD_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_REGEX_LIBRARY} ${Boost_DATE_TIME_LIBRARY} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})

find_package(cpprestsdk REQUIRED)

message("this is ${Boost_INCLUDE_DIRS}")

# build and set path to cpp rest sdk
set(CPPREST_ROOT ${PROJECT_SOURCE_DIR}/../../../vcpkg/packages/cpprestsdk_x86-windows)
set(CPPREST_INCLUDE_DIR ${CPPREST_ROOT}/include)
#set(CPPREST_LIBRARY_DIR ${CPPREST_ROOT}/lib)

include_directories(${PROJECT_SOURCE_DIR} api model ${CPPREST_INCLUDE_DIR} ${Boost_INCLUDE_DIRS})
#include_directories(${PROJECT_SOURCE_DIR} api model ${CPPREST_INCLUDE_DIR})#SUPPORTING FILES
set(SUPPORTING_FILES  "ApiClient" "ApiConfiguration" "ApiException" "HttpContent" "IHttpBody" "JsonBody" "ModelBase" "MultipartFormData" "Object")
#SOURCE FILES
file(GLOB SOURCE_FILES  "api/*"  "model/*")

add_library(${PROJECT_NAME} ${SUPPORTING_FILES} ${SOURCE_FILES} )

Однако, когда я строю проект, я беру некоторые ошибки относительно повышения

c: \ code \ cpprest-client \ multipartformdata.cpp (16): фатальная ошибка C1083:
Не удается открыть файл включения: ‘boost / uuid / random_generator.hpp’: нет такого
файл или каталог

а также

c: \ code \ cpprest-client \ api \ userapi.h (36): фатальная ошибка C1083: невозможно
открыть включаемый файл: ‘boost / option.hpp’: нет такого файла или каталога

В моем PowerShell я вижу эти библиотеки установлены

PS C:\vcpkg\packages> ls .\boost-uuid_x86-windowsDirectory: C:\vcpkg\packages\boost-uuid_x86-windows

Любые идеи, что происходит. Я уже потерял часы с этим.

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        5/11/2018  11:47 AM                include
d-----        5/11/2018  11:47 AM                share
-a----        5/11/2018  11:47 AM             46 BUILD_INFO
-a----        5/11/2018  11:47 AM            405 CONTROLPS C:\vcpkg\packages> ls .\boost-optional_x64-windowsDirectory: C:\vcpkg\packages\boost-optional_x64-windowsMode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        5/11/2018   1:25 PM                include
d-----        5/11/2018   1:25 PM                share
-a----        5/11/2018   1:25 PM             46 BUILD_INFO
-a----        5/11/2018   1:25 PM            302 CONTROL

0

Решение

Из того, что я могу сказать, похоже, что вы просто забыли настроить файл CMake toolchain. Когда вы включили интеграцию vcpkg, вы должны были получить сообщение вроде:

CMake projects should use:
"-DCMAKE_TOOLCHAIN_FILE=(your vcpkg directory here)/scripts/buildsystems/vcpkg.cmake"

Если вы используете Visual Studio 2017, вам просто нужно перейти в меню CMake вверху, перейти к «Изменить настройки CMake» и нажать на название вашего проекта. Это откроет файл CMakeSettings.json. Это будет выглядеть примерно так:

{
// See https://go.microsoft.com//fwlink//?linkid=834763 for more information about this file.
"configurations": [
{
"name": "x86-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x86" ],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "-v",
"ctestCommandArgs": ""},
{
"name": "x86-Release",
"generator": "Ninja",
"configurationType": "Release",
"inheritEnvironments": [ "msvc_x86" ],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "-v",
"ctestCommandArgs": ""},
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "-v",
"ctestCommandArgs": ""},
{
"name": "x64-Release",
"generator": "Ninja",
"configurationType": "Release",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "-v",
"ctestCommandArgs": ""},

Чтобы настроить цепочку сборки, вам нужно сообщить CMake, где находится файл цепочки инструментов vcpkg. Для этого добавьте следующую строку под ctestCommandArgs для всех четырех конфигураций.

"variables": [
{
"name": "CMAKE_TOOLCHAIN_FILE",
"value": "<LOCATION OF THE FILE> (reintegrate vcpkg and it'll tell you again)"}
]

Я также рекомендую вам сделать следующее:

  • Изменить генератор с ниндзя на Visual Studio
  • Укажите собственный 64-битный buildchain для конфигураций x64
  • Удалить -v вещь под командой args

Вот так мой CMakeSettings.json выглядит файл:

{
// See https://go.microsoft.com//fwlink//?linkid=834763 for more information about this file.
"configurations": [
{
"name": "x86-Debug",
"generator": "Visual Studio 15 2017",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x86" ],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"variables": [
{
"name": "CMAKE_TOOLCHAIN_FILE",
"value": "C:/Source-Code/vcpkg/scripts/buildsystems/vcpkg.cmake"}
]
},
{
"name": "x86-Release",
"generator": "Visual Studio 15 2017",
"configurationType": "Release",
"inheritEnvironments": [ "msvc_x86" ],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"variables": [
{
"name": "CMAKE_TOOLCHAIN_FILE",
"value": "C:/Source-Code/vcpkg/scripts/buildsystems/vcpkg.cmake"}
]
},
{
"name": "x64-Debug",
"generator": "Visual Studio 15 2017 Win64",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-T host=x64",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"variables": [
{
"name": "CMAKE_TOOLCHAIN_FILE",
"value": "C:/Source-Code/vcpkg/scripts/buildsystems/vcpkg.cmake"}
]
},
{
"name": "x64-Release",
"generator": "Visual Studio 15 2017 Win64",
"configurationType": "Release",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeCommandArgs": "-T host=x64",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"variables": [
{
"name": "CMAKE_TOOLCHAIN_FILE",
"value": "C:/Source-Code/vcpkg/scripts/buildsystems/vcpkg.cmake"}
]
},
{
"name": "Linux-Debug",
"generator": "Unix Makefiles",
"remoteMachineName": "${defaultRemoteMachineName}",
"configurationType": "Debug",
"remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}",
"cmakeExecutable": "/usr/local/bin/cmake",
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}",
"remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}",
"remoteCopySources": true,
"remoteCopySourcesOutputVerbosity": "Normal",
"remoteCopySourcesConcurrentCopies": "10",
"remoteCopySourcesMethod": "rsync",
"remoteCopyBuildOutput": false,
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "linux_x64" ]
},
{
"name": "Linux-Release",
"generator": "Unix Makefiles",
"remoteMachineName": "${defaultRemoteMachineName}",
"configurationType": "Release",
"remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}",
"cmakeExecutable": "/usr/local/bin/cmake",
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}",
"remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}",
"remoteCopySources": true,
"remoteCopySourcesOutputVerbosity": "Normal",
"remoteCopySourcesConcurrentCopies": "10",
"remoteCopySourcesMethod": "rsync",
"remoteCopyBuildOutput": false,
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "linux_x64" ]
}
]
}

Обратите внимание, что для передачи конфигурации x64 используется -T host=x64 аргумент командной строки, а также специально объявив генератор как Visual Studio 15 2017 Win64, а не просто Visual Studio 15, Если вы не укажете собственный хост x64, Visual Studio по умолчанию x86.


Проблема с тем, как вы настроили свой файл как обходной путь (если он работал вообще), заключается в том, что, поскольку вы специально указывали каталоги и тому подобное, вы потеряли много удобства использования системы сборки.

Когда у вас есть шанс, я очень рекомендую вам посмотри это видео о том, как эффективно использовать CMake. Он говорит о таких вещах, как не использовать INCLUDE_DIRECTORIES команда, потому что эта команда работает на уровне каталога, а не на основе цели.

Я уверен, что вы сделали все это из отчаяния, пытаясь заставить CMake работать (мы все были там), но об этом нужно помнить; это определенно поразило меня, когда я впервые увидел, что использование этих супер удобных и полезных команд на самом деле приносит мне больше вреда, чем пользы.

Например, вместо того, чтобы явно устанавливать стандартный флаг C ++, как вы делали это в вашем CMakeLists.txt, попробуйте это в следующий раз:

CMAKE_MINIMUM_REQUIRED (VERSION 3.8)
PROJECT (CppRestSwaggerClient VERSION 1.0.0 LANGUAGES CXX)

OPTION (TREAT_WARNINGS_AS_ERRORS "Treat warnings as errors" OFF)

SET_PROPERTY (CppRestSwaggerClient CXX_STANDARD 17)
SET_PROPERTY (CppRestSwaggerClient CXX_STANDARD_REQUIRED ON)

TARGET_COMPILE_FEATURES (CppRestSwaggerClient
PRIVATE
cxx_constexpr
)

Вы поняли идею. В основном вы хотите только конфигурировать ваш проект, на самом деле не устанавливайте флаги самостоятельно, в противном случае вы только усложняете для себя не отставать от обслуживания и настройки вашего проекта с течением времени.

Надеюсь это поможет. Удачи!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]