我无法让< code>boost::asio在我的c程序中使用cmake。事实上,我已经试着在谷歌上搜索了好几个小时,但是我不能让它工作!
我想在Ubuntu 18.04下的c项目中包含增强::asio
和cmake文件。
所以我安装了最新的CMake (cmake版本3.19.4
),下载了boost版本1.74并执行
./bootstrap.sh --prefix=/usr/
sudo ./b2 install
安装目录是 /home/boost/boost_1_74_0
。我的CMake文件看起来像这样:
cmake_minimum_required (VERSION 3.1.0)
# Project name
project (machine_tryout VERSION 1.0)
# Boost (header only)
#set(Boost_DEBUG 1)
set(BOOST_ROOT "$ENV{HOME}/boost/boost_1_74_0")
set(Boost_INCLUDE_DIR "$ENV{HOME}/boost/boost_1_74_0")
set(Boost_LIBRARY_DIR "$ENV{HOME}/boost/boost_1_74_0/libs")
find_package(Boost REQUIRED Components asio)
# Set Executable
add_executable(${PROJECT_NAME} source/tryout.cpp)
但我得到的一切都是:
vm-umic@vm:~/Projects/tryout/build$ cmake ..
CMake Warning at /snap/cmake/775/share/cmake-3.19/Modules/FindBoost.cmake:2034 (message):
No header defined for asio; skipping header check (note: header-only
libraries have no designated component)
Call Stack (most recent call first):
CMakeLists.txt:27 (find_package)
CMake Error at /snap/cmake/775/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:218 (message):
Could NOT find Boost (missing: asio) (found version "1.74.0")
Call Stack (most recent call first):
/snap/cmake/775/share/cmake-3.19/Modules/FindPackageHandleStandardArgs.cmake:582 (_FPHSA_FAILURE_MESSAGE)
/snap/cmake/775/share/cmake-3.19/Modules/FindBoost.cmake:2193 (find_package_handle_standard_args)
CMakeLists.txt:27 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/vm-umic/Projects/tryout/build/CMakeFiles/CMakeOutput.log".
我到底做错了什么?CMake不是告诉我它找到了Boost 1.74吗?如果我尝试<code>find_package(Boost REQUIRED)</code>,CMake不会抛出任何错误,但链接也不起作用。我明确告诉CMake在哪里可以找到库,所以为什么CMake找不到Boost?
试试这个。
cmake_minimum_required (VERSION 3.1.0)
# Project name
project (machine_tryout VERSION 1.0)
# Boost (header only)
#set(Boost_DEBUG 1)
set(BOOST_ROOT "$ENV{HOME}/boost/boost_1_74_0")
set(Boost_INCLUDE_DIR "$ENV{HOME}/boost/boost_1_74_0")
set(Boost_LIBRARY_DIR "$ENV{HOME}/boost/boost_1_74_0/libs")
find_package(Boost REQUIRED Components system)
# Set Executable
add_executable(${PROJECT_NAME} source/tryout.cpp)
target_link_libraries(${PROJECT_NAME}
${Boost_LIBRARIES})
我刚刚遇到了类似的问题,并发现我错过了Boost安装中一个很小但很重要的步骤:将安装目录(即< code > B2 install-PREFIX = PREFIX 中使用的< code>PREFIX)添加到< code>PATH环境变量中。
对我来说,这解决了它-希望对你也是如此!