【问题标题】:Lib boost not being accessible outside mainLib 提升在 main 之外无法访问
【发布时间】:2021-09-21 05:00:02
【问题描述】:

我正在尝试在我的项目中使用 Boost,但它只能在 main.cpp 内部访问。如果我尝试将它包含在另一个文件中,我会收到错误消息。不知道是不是必须在CMakeLists.txt中指定。

# CMakeLists.txt
...

include (cmake/CPM.cmake)

CPMAddPackage(
  NAME PackageProject.cmake
  GITHUB_REPOSITORY TheLartians/PackageProject.cmake
  VERSION 1.4
)

# ------------------------------   Boost    ----------------------------------
CPMAddPackage("gh:Orphis/boost-cmake#7f97a08b64bd5d2e53e932ddf80c40544cf45edf@1.71.0")
# -----------------------------------------------------------------------------

...

# Core
add_library(
  ProjectCore
  include/ProjectCore.hpp
  src/ProjectCore.cpp
  )

# Utils
add_library(
  Utils
  include/utils.hpp
  src/utils.cpp
  )

...

target_include_directories(ProjectCore PUBLIC include/)
target_include_directories(Utils PUBLIC include/)

add_executable(Project src/main.cpp)
target_link_libraries(Project
  PUBLIC Boost::system
  PRIVATE ProjectCore
  PRIVATE Utils
  )
# -----------------------------------------------------------------------------
set_target_properties(Project PROPERTIES CXX_STANDARD 17)

我继续执行以下命令:

core$ md build && cd build && cmake ..
core$ bear -- make -C build
core$ ./build/Project

尝试在 main.cpp 上添加提升

尝试在utils.cpp 上添加提升

【问题讨论】:

  • 您知道您不仅限于做编辑认为您可以做的事情吗?你可以继续输入你想#include的头文件的名称,这不是你的编辑器,而是你的编译器,这将是最终判断这是否有效?
  • 是的,我很清楚这一点,事实上我什至尝试编译,编译器说的和 ccls 指出的几乎一样。 Ccls 通常对我的代码中发生的事情非常准确。
  • link project 与 Boost 一起执行,因此编译到该可执行文件中的 main.cpp 可以看到 Boost 包含。您不链接 Utils 库与 Boost,因此作为该库一部分的 src/utils.cpp 看不到 Boost 包含。你还期待什么?
  • @Tsyvarev 谢谢你????最后没注意这一点,第一次自己用cmake,见识一下菜鸟的错误。

标签: c++ boost cmake c++17


【解决方案1】:

正如Tsyvarev 在主消息线程中指出的那样,我忘记将 Boost 与我想使用的其他库链接。我最终能够通过添加以下行来运行它

target_link_libraries(Utils PRIVATE Boost::system)

【讨论】:

    猜你喜欢
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多