对不起,标题似乎有些令人费解。基本思想如下: 我有一个主要的CMakeLists.txt文件,该文件添加了三个子目录。 其中第一个是CMakeLists.txt文件,该文件可获取boost-cmake版本。
FetchContent_Declare(boost-cmake
GIT_REPOSITORY https://github.com/ *****/boost-cmake
GIT_TAG master)
FetchContent_GetProperties(boost-cmake)
if(NOT boost-cmake_POPULATED)
FetchContent_Populate(boost-cmake)
add_subdirectory(${boost-cmake_SOURCE_DIR} ${boost-cmake_BINARY_DIR})
endif()
第二个创建了与此链接的库。
add_library(program Program.cpp)
target_link_libraries(program ${Boost_LIBRARIES})
此操作成功,并生成一个.lib文件。也就是说,它似乎包含Program.cpp #includes
中包含的所有boost功能的符号最后,当我尝试将program.lib库链接到可执行文件时:
include_directories(${CMAKE_SOURCE_DIR}/src)
add_executable(program_test Program_Test.cpp)
target_link_libraries(program_test PRIVATE program)
构建此文件会导致以下错误:
FAILED: test/CMakeFiles/program_test.dir/program_test.cpp.obj
C:\PROGRA~2\MICROS~1\2019\COMMUN~1\VC\Tools\MSVC\1421~1.277\bin\HostX64\x64\cl.exe /nologo /TP -I..\src /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /ZI /Ob0 /Od /RTC1 /JMC -std:c++latest /showIncludes /Fotest\CMakeFiles\program_test.dir\program_test.cpp.obj /Fdtest\CMakeFiles\program_test.dir\ /FS -c ..\test\program_test.cpp
D:\Git\program\src\connection\program.hpp(5): fatal error C1083: Cannot open include file: 'boost/beast.hpp': No such file or directory
要求所有这样的嵌套依赖项是标准的吗?是否有任何解决方法可以确保所有boost定义都包含在库中,从而仅需要库本身?
值得一提的是,我尝试以与库中包含的方式相同的方式包含boost / beast.hpp文件,但是这似乎也不能解决问题,尽管无论如何这都不是一个可取的解决方案。 / p>
答案 0 :(得分:0)
您没有链接错误,您有编译错误。
D:\Git\program\src\connection\program.hpp(5): fatal error C1083: Cannot open include file: 'boost/beast.hpp': No such file or directory
VisualStudio编译器找不到boost/beast.hpp
。在您共享的CMakeLists.txt
中,您始终没有告诉目标program_test
在哪里可以找到其包含文件。就像您添加了target_link_libraries()
以便VisualStudio链接器可以找到库一样,您需要添加target_include_directories()
以便VisualStudio编译器可以在Program_Test.cpp
中找到包含文件。>