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

C++ 在cmake中使用boost::json静态库,c++,boost,cmake,C++,Boost,Cmake,我有这个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) 项目可以配置和构建tho~~但是我发现的compile\u命令.json实际上没有链接到静态库,这清楚地

我有这个
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)
项目可以配置和构建tho~~但是我发现的
compile\u命令.json
实际上没有链接到静态库,这清楚地表明它没有找到,并且被编译为只包含头的库~~

编辑:我发现它实际上链接到生成的
build.ninja
文件中的
libboost\u json-mt.a
,所以cmake在
find\u包中找不到静态库这一事实很奇怪

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>
#包括
在你的一个翻译单元里。这使得boostjson有效地只包含头

相关文件:

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


不要提及静态库构建变体。@user7860670它说它可以链接到构建的静态或动态Boost库
,我确实发现了
libboost_json-mt.a
它说当与其他Boost库一起使用Boost.json时,您的可执行文件需要链接到构建的静态或动态Boost库,并不是说boost.json本身是静态的,我不知道这意味着什么。它似乎也可以使用
target\u link\u库(PRIVATE boost\u json-mt)
工作,因此它肯定可以静态链接。如果您能用
CMakeLists.txt
的“预期”用法回答,那就太好了。是的,我理解这部分。但是这个包确实附带了
libboost\u json-mt.a
文件,为什么cmake在
find\u包
调用中找不到它呢?
 #include <boost/json/src.hpp>