【问题标题】:Cmake cannot include boost library from main [duplicate]Cmake不能包含来自main的boost库[重复]
【发布时间】:2019-11-29 11:53:38
【问题描述】:

我在 Windows 上使用带有 Visual Studio 2019 的 boost-beast。在我将现有类添加到 main.cpp 之前,一切正常。然后其中一个 .h 文件无法打开 boost 文件。我将#include 语句移到 .cpp 文件中。它仍然失败并出现同样的错误。

最简单的代码是:

#include <algorithm>
#include <iostream>
#include <boost/system/error_code.hpp>
#include "pml_webserver/pml_webserver.h"
#include "pml_webserver/product_factory.h"
#include "pml_webserver/config.h"

int main(int argc, char* argv[])
{
    // omitted
}

编译的所有其他文件。 Main.cpp 导致了这个错误:

[4/12] Building CXX object CMakeFiles\pml_webserver.dir\src\main.cpp.obj

FAILED: CMakeFiles/pml_webserver.dir/src/main.cpp.obj 
  C:\PROGRA~2\MICROS~2\2019\PROFES~1\VC\Tools\MSVC\1421~1.277\bin\HostX64\x64\cl.exe  /nologo /TP  -IC:\Users\me\source\xplatform\core_pml_webserver\include -Iinclude /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /ZI /Ob0 /Od /RTC1 /JMC   -std:c++17 /showIncludes /FoCMakeFiles\pml_webserver.dir\src\main.cpp.obj /FdCMakeFiles\pml_webserver.dir\ /FS -c C:\Users\me\source\xplatform\core_pml_webserver\src\main.cpp

C:\Users\me\source\xplatform\core_pml_webserver\include\pml_webserver\base_ws_handler.h(10): fatal error C1083: Cannot open include file: 'boost/system/error_code.hpp': No such file or directory

我无法确定问题出在我没有多少经验的 Cmake 上,还是由命名空间引起的。

编辑:CMakeLists.txt 的部分

cmake_minimum_required(VERSION 3.12)
project(pml_webserver CXX)

find_package(Boost 1.70.0 REQUIRED COMPONENTS system date_time)
configure_file(include/pml_webserver/config.h.in
    ${CMAKE_BINARY_DIR}/include/pml_webserver/config.h
)

add_library(pml_webserver_lib
    src/webserver.cpp
    src/base_ws_handler.cpp
    src/ws_handler_factory.cpp
    src/product_ws_handler.cpp
    src/product_factory.cpp

set_target_properties(pml_webserver_lib PROPERTIES PREFIX "")

target_include_directories(pml_webserver_lib PUBLIC ${CMAKE_SOURCE_DIR}/include PUBLIC ${CMAKE_BINARY_DIR}/include)
target_link_libraries(pml_webserver_lib
 PRIVATE Boost::system
 PRIVATE Boost::date_time
 )

add_executable(pml_webserver src/main.cpp)
target_link_libraries(pml_webserver pml_webserver_lib)

我不知道CMAKE_SOURCE_DIRCMAKE_BINARY_DIR是在哪里定义的。

【问题讨论】:

  • 我无法确定问题出在 Cmake 上,我对此没有什么经验,还是由命名空间引起的。 我不知道'认为问题也不是。我认为问题在于您的 boost 包含路径设置不正确。
  • CMake 代码 (CMakeLists.txt) 会影响可执行文件使用的包含目录和库。由于您没有提供该代码,我们只能向您指出有关将 Boost 与 CMake 结合使用的其他问题,

标签: c++ visual-studio cmake boost-asio


【解决方案1】:

正如@drescherjm 评论的那样,您的问题是 boost 的包含路径设置不正确,

如果您使用的是cmake,那么您的CMakeLists.txt 文件应包含以下内容:

find_package(Boost REQUIRED COMPONENTS system)
if(Boost_FOUND)
  target_include_directories(${PROJECT_NAME} PRIVATE ${Boost_INCLUDE_DIRS})
  target_link_libraries(${PROJECT_NAME} PRIVATE Boost::system)
endif(Boost_FOUND)

注意:还要将环境变量:BOOST_ROOTBOOST_LIBRARYDIR分别设置到boost根目录和库目录的位置,这样cmake才能找到boost

如果您不习惯使用cmake,则可以将boost 根目录和库二进制目录的位置直接添加到Visual Studio,如here 所述。

【讨论】:

  • 我使用 vcpkg 安装了 Boost。我将BOOST_ROOTBOOST_LIBRARYDIR 设置为~\vcpkg\installed\x64-windows。这些是正确的吗?
  • 我直接设置了boost,没用过vcpkg。但是,目录名在我看来是错误的:它应该是绝对路径名,而不是相对路径名,即它应该以 C:`. Also BOOST_ROOT` 开头,而 BOOST_LIBRARYDIR 通常是不同的目录...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
  • 1970-01-01
相关资源
最近更新 更多