project(learn)
cmake_minimum_required(VERSION 3.11)
set(CMAKE_CXX_STANDARD 17)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
message("Current OS is Linux")
include_directories("/mnt/e/c++/boost_1_72_0")
link_directories("/mnt/e/c++/boost_1_72_0/stage/lib")
link_libraries(pthread boost_thread boost_fiber boost_context)
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
message("Current OS is Windows")
include_directories("E:/c++/boost_1_72_0")
link_directories("E:/c++/boost_1_72_0/stage/lib")
endif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
add_executable(learn_asio learn_asio.cpp)
learn_asio. cpp:
#include <boost/asio.hpp>
#include <boost/fiber/all.hpp>
#include <boost/thread.hpp>
#include <iostream>
using boost::asio::async_write;
using boost::asio::buffer;
using boost::asio::io_context;
using boost::asio::use_future;
using boost::asio::ip::make_address;
using boost::asio::ip::tcp;
using boost::fibers::async;
using boost::fibers::fiber;
using boost::system::error_code;
int main(){
io_context ioc;
tcp::socket socket(ioc);
tcp::endpoint ep(make_address("192.168.1.20"), 80);
auto ret_f = socket.async_connect(ep, boost::asio::use_future);
boost::thread_group t;
t.create_thread([&ioc]() {
ioc.run();
std::cout << "jfiejf" << std::endl;
});
ret_f.wait_for(std::chrono::seconds(3));
t.join_all();
return 0;
}
Папка моей библиотеки: Согласно приведенному выше коду, я могу успешно построить свой код. Но я ненавижу код:
link_libraries(pthread boost_thread boost_fiber boost_context)
на платформе linux. Почему он мне не нужен на windows платформах? Насколько я помню, Linux может автоматически связывать библиотеку. Как мне этого добиться?