这就是CMakeLists.txt的样子
我从here下载了asio
库。它包含许多必须包含在项目中的头文件。问题是这些标题位于目录内,而#include
语句只是与正确的目录不匹配。
例如,他们有一个asio/async_result.hpp
文件。该文件包含asio/detail/config.hpp
。但它应该是../asio/detail/config.hpp
我该怎么办?单个方便地重命名所有这200个头文件以适应正确的目录结构?他们为什么开箱即错?
答案 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)