使用asio独立头库

时间:2016-04-09 13:20:27

标签: c++ cmake boost-asio

这就是CMakeLists.txt的样子

我从here下载了asio库。它包含许多必须包含在项目中的头文件。问题是这些标题位于目录内,而#include语句只是与正确的目录不匹配。

例如,他们有一个asio/async_result.hpp文件。该文件包含asio/detail/config.hpp。但它应该是../asio/detail/config.hpp

我该怎么办?单个方便地重命名所有这200个头文件以适应正确的目录结构?他们为什么开箱即错?

1

3 个答案:

答案 0 :(得分:1)

您必须先安装这些标头。在大多数系统上(当然除了窗口之外),存在这样的包含文件最终的典型路径。

您项目的构建系统(例如Cmake)的工作是在您的计算机上查找asio并配置编译器,以便它在这些文件夹中查找,并在您执行时找到正确的文件

#include <asio/handler_type.hpp>

永远不会 中使用创建项目(当然,除非您想要更改/扩展该库)。在其他地方创建一个项目并告诉cmake寻找asio。

此外,除非您的源代码是库本身的一部分,否则不应包含_detail.hpp个文件;这些通常不是库用户使用的API的一部分,而是内部结构。

修改

如上所述,asio现在是提升的一部分,因此正确安装包括其boost::asio模块的提升,指示cmake

 find_package(Boost COMPONENTS asio)

并使用例如

 #include <boost/asio.hpp>
 #include <boost/thread/thread.hpp>

有关更多示例,请参阅官方Boost asio Tutorial

答案 1 :(得分:0)

以下是我的工作更新CMakeLists.txt

cmake_minimum_required(VERSION 3.3)
project(server_client)

# take a look at the -I command
# this will incude all the header files in your project. So simple
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -I C:/Users/Shiro/Desktop/asio-1.10.6/include")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS} -static")
# Don't forget this! The libws2_re.lib library is 100% required for windows !
# I also added libwsock32.lib, not sure if thats necessary
# Those .lib files are located at C:\MinGW\lib on my machine
# That directory is located automatically, you don't have to add the full path
link_libraries(ws2_32 wsock32)


set(SOURCE_FILES chat_server.cpp)
add_executable(server_client ${SOURCE_FILES})

在我的源.cpp文件上,您必须添加

// this is required otherwise asio tries to include 
// other boost libraries which you won't have installed
// or you could add a -DASIO_STANDALONE flag right next to -std=c++11 in CMakeLists.txt
#define ASIO_STANDALONE  

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501 // windows stuff, not sure what this does
#endif

#include <asio.hpp> // include asio library

答案 2 :(得分:0)

这是一个简单的CMake脚本,该脚本使用ASIO独立版本构建示例HTTP客户端,并设置为使用以下代码生成Visual Studio 2019项目

cmake -H. -Bbuild -G "Visual Studio 16 2019" -A x64 

https://think-async.com/Asio/AsioStandalone.html

(无助推)。假设文件夹asio-1.12.2中的源代码

cmake_minimum_required(VERSION 3.1)
project (asio)

set(CMAKE_CXX_STANDARD 11)
add_definitions(-DASIO_STANDALONE)
add_definitions(-DASIO_HAS_STD_ADDRESSOF)
add_definitions(-DASIO_HAS_STD_ARRAY)
add_definitions(-DASIO_HAS_CSTDINT)
add_definitions(-DASIO_HAS_STD_SHARED_PTR)
add_definitions(-DASIO_HAS_STD_TYPE_TRAITS)
add_definitions(-DASIO_HAS_VARIADIC_TEMPLATES)
add_definitions(-DASIO_HAS_STD_FUNCTION)
add_definitions(-DASIO_HAS_STD_CHRONO)
add_definitions(-DBOOST_ALL_NO_LIB)
add_definitions(-D_WIN32_WINNT=0x0501)
add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)

include_directories(asio-1.12.2/include)
add_executable(sync_client asio-1.12.2/src/examples/cpp11/socks4/sync_client.cpp)