mil*_*bos 5 c++ boost build cmake
如何使用cmake运行boost asio?没有这个简单的项目布局:
\nc1\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 c1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.cpp\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\nRun Code Online (Sandbox Code Playgroud)\nCMakeLists.txt:
cmake_minimum_required(VERSION 3.20.0)\nproject(c1)\n\nadd_executable(c1 c1/main.cpp)\ninclude_directories(.)\n\nset(BOOST_ROOT /usr/local/boost_1_78_0)\nfind_package(Boost 1.78.0 REQUIRED COMPONENTS system)\ntarget_include_directories(c1 PUBLIC ${Boost_INCLUDE_DIR})\ntarget_link_libraries(c1 LINK_PUBLIC ${Boost_LIBRARIES})\nRun Code Online (Sandbox Code Playgroud)\n和main.cpp:
#include <iostream>\n#include <boost/asio.hpp>\n\nint main(){\n boost::asio::io_context io;\n boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));\n t.wait();\n std::cout << "Hello world!" << std::endl;\n}\nRun Code Online (Sandbox Code Playgroud)\n我收到此 cmake 错误:
\nCMake Error at /usr/local/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):\n Could NOT find Boost (missing: system) (found suitable version "1.78.0",\n minimum required is "1.78.0")\nCall Stack (most recent call first):\n /usr/local/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)\n /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args)\n CMakeLists.txt:8 (find_package)\nRun Code Online (Sandbox Code Playgroud)\n我不确定我理解是否正确,但它正在尝试找到合适的版本1.78.0,但它找到了1.78.0,那么问题是什么?
在此之前,还有一个警告:
\nCMake Warning at /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:1369 (message):\n New Boost version may have incorrect or missing dependencies and imported\n targets\nCall Stack (most recent call first):\n /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:1492 (_Boost_COMPONENT_DEPENDENCIES)\n /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2102 (_Boost_MISSING_DEPENDENCIES)\n CMakeLists.txt:8 (find_package)\nRun Code Online (Sandbox Code Playgroud)\n所以我该怎么做?
\n编辑:\n系统库位于:
\n/usr/local/boost_1_78_0/boost/system\nRun Code Online (Sandbox Code Playgroud)\n以及 cmake 在哪里查找的调试输出:
\n-- [ /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2053 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = "/usr/local/boost_1_78_0/lib;/usr/local/boost_1_78_0/stage/lib;/usr/local/boost_1_78_0/lib;/usr/local/boost_1_78_0/../lib;/usr/local/boost_1_78_0/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib"\n-- [ /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2054 ] _boost_LIBRARY_SEARCH_DIRS_DEBUG = "/usr/local/boost_1_78_0/lib;/usr/local/boost_1_78_0/stage/lib;/usr/local/boost_1_78_0/lib;/usr/local/boost_1_78_0/../lib;/usr/local/boost_1_78_0/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib"\n\n-- [ /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2239 ] Searching for SYSTEM_LIBRARY_RELEASE: boost_system-gcc10-mt-1_78;boost_system-gcc10-mt;boost_system-gcc10-mt;boost_system-mt-1_78;boost_system-mt;boost_system-mt;boost_system-mt;boost_system\n-- [ /usr/local/share/cmake-3.22/Modules/FindBoost.cmake:2294 ] Searching for SYSTEM_LIBRARY_DEBUG: boost_system-gcc10-mt-d-1_78;boost_system-gcc10-mt-d;boost_system-gcc10-mt-d;boost_system-mt-d-1_78;boost_system-mt-d;boost_system-mt-d;boost_system-mt;boost_system\nRun Code Online (Sandbox Code Playgroud)\n但我不明白,为什么 cmake 找不到那个库。
\n看起来您忘记构建 Boost 库。
许多 Boost 库是或可以是仅包含头文件的库,但也有很多不是。
我认为 CMake FindBoost 组件只关心需要构建的库。因此,如果您将其命名system为必需组件,那么您就是在告诉 CMake 您需要链接它,并且它会查找构建的库。
构建的库通常位于stage/lib/例如
/home/sehe/custom/boost/stage/lib/libboost_system.a
/home/sehe/custom/boost/stage/lib/libboost_system.so
/home/sehe/custom/boost/stage/lib/libboost_system.so.1.78.0
Run Code Online (Sandbox Code Playgroud)
但是,如果您没有构建该库,它将丢失。
请参阅https://www.boost.org/doc/libs/1_78_0/more/getting_started/unix-variants.html
不要浪费时间尝试编译 Boost,这不是这里的问题。
就像Tsyvarev所说,从1.69版开始,如果您仅使用system或任何其他仅使用标头的组件(不需要构建),则必须删除关键字COMPONENT
find_package(Boost 1.80.0 REQUIRED)
# ...Nothing more
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13159 次 |
| 最近记录: |