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