gpt4 book ai didi

c++ - 在 cmake 中使用 boost::json 静态库

转载 作者:行者123 更新时间:2023-12-05 06:47:19 34 4
gpt4 key购买 nike

我有这个 CMakeLists.txt

set(Boost_USE_STATIC_LIBS   ON)
find_package(Boost REQUIRED COMPONENTS json)
include_directories(${BOOST_INCLUDE_DIRS})
target_link_libraries(<Target> PRIVATE Boost::json)

但是我收到 cmake 警告

[cmake] CMake Warning at C:/Program Files/CMake/share/cmake3.20/Modules/FindBoost.cmake:2185 (message):
[cmake] No header defined for json; skipping header check (note: header-only
[cmake] libraries have no designated component)

该项目可以配置和构建。 ~~但是我发现的compile_command.json实际上并没有链接到静态库,这清楚地表明它没有找到并且被编译为仅 header 库。~~

编辑:我发现它实际上链接到生成的 build.ninja 文件中的 libboost_json-mt.a,所以 cmake 找不到的事实很奇怪find_package 调用中的静态库。

build MyTest.exe MyTest[1]_tests.cmake: CXX_EXECUTABLE_LINKER__MyTest_Debug CMakeFiles/MyTest.dir/test.cpp.obj CMakeFiles/MyTest.dir/BasicStructures/Uri.cpp.obj | C$:/msys64/mingw64/lib/libgtest_main.dll.a C$:/msys64/mingw64/lib/libboost_json-mt.a C$:/msys64/mingw64/lib/libgtest.dll.a C$:/msys64/mingw64/lib/libboost_container-mt.a
FLAGS = -g
LINK_LIBRARIES = C:/msys64/mingw64/lib/libgtest_main.dll.a C:/msys64/mingw64/lib/libboost_json-mt.a C:/msys64/mingw64/lib/libgtest.dll.a C:/msys64/mingw64/lib/libboost_container-mt.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
OBJECT_DIR = CMakeFiles\MyTest.dir
POST_BUILD = cmd.exe /C "cd /D C:\Users\Peter\Desktop\LspCpp\build && "C:\Program Files\CMake\bin\cmake.exe" -D TEST_TARGET=MyTest -D TEST_EXECUTABLE=C:/Users/Peter/Desktop/LspCpp/build/MyTest.exe -D TEST_EXECUTOR= -D TEST_WORKING_DIR=C:/Users/Peter/Desktop/LspCpp/build -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=MyTest_TESTS -D CTEST_FILE=C:/Users/Peter/Desktop/LspCpp/build/MyTest[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=5 -D TEST_XML_OUTPUT_DIR= -P "C:/Program Files/CMake/share/cmake-3.20/Modules/GoogleTestAddTests.cmake""
PRE_LINK = cd .
RESTAT = 1
TARGET_FILE = MyTest.exe
TARGET_IMPLIB = libMyTest.dll.a
TARGET_PDB = MyTest.exe.dbg

最佳答案

而不是静态链接选项,我认为你应该包括

 #include <boost/json/src.hpp>

在您的一个翻译单元中。这使得 Boost JSON 有效地仅包含 header 。

相关文档:https://github.com/boostorg/json#header-only

接下来,您可以使用此方法创建自己的静态库。请记住,如果您的工具链需要它们 (MSVC),则可选择定义可见性宏:

https://github.com/boostorg/json#standalone-shared-library

关于c++ - 在 cmake 中使用 boost::json 静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67146394/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com