我今天安装了vcpkg,启用了与Visual Studio的集成,即。\ vcpkg集成安装,并开始安装库。
我基本上安装了cpprestsdk并触发了boost库的安装。然后我在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} )
然而,当我构建项目时,我正在考虑有关boost
的一些错误c:\ code \ cpprest-client \ multipartformdata.cpp(16):致命错误C1083: 无法打开包含文件:'boost / uuid / random_generator.hpp':没有这样的 文件或目录
和
c:\ code \ cpprest-client \ api \ userapi.h(36):致命错误C1083:不能 打开包含文件:'boost / optional.hpp':没有这样的文件或目录
在我的powershell中,我看到安装了这些库
PS C:\vcpkg\packages> ls .\boost-uuid_x86-windows
Directory: 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 CONTROL
PS C:\vcpkg\packages> ls .\boost-optional_x64-windows
Directory: C:\vcpkg\packages\boost-optional_x64-windows
Mode 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 :(得分:4)
据我所知,您似乎忘了配置CMake工具链文件。当您启用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)"
}
]
我还建议您执行以下操作:
-v
内容
这是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将default to x86。
将文件设置为解决方法(如果它完全有效)的问题在于,由于您专门指定了目录等等,因此您在使用构建系统时失去了很多便利。第一名。
当你有机会时,我真的建议你watch this video如何有效地使用CMake。他谈到了不使用INCLUDE_DIRECTORIES
命令之类的事情,因为该命令在目录级别工作,而不是在每个目标的基础上工作。
我敢肯定你只是出于绝望而努力让CMake工作(我们都去过那里),但这是要记住的事情;当我第一次看到使用那些超级方便和有用的命令时,它确实让我大吃一惊,实际上对我的弊大于利。
例如,不要像在CMakeLists.txt中那样显式设置C ++标准标志,而是下次尝试:
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
)
你明白了。基本上你只想配置你的项目,而不是自己设置标志,否则你只会让自己更难以跟上项目的维护和配置。
希望这有帮助,祝你好运!