链接到构建的静态库,该静态库链接到另一个静态库

时间:2019-07-24 13:41:24

标签: cmake

对不起,标题似乎有些令人费解。基本思想如下: 我有一个主要的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>

1 个答案:

答案 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中找到包含文件。