CMake-如何继承静态库包含和依赖项?

时间:2018-11-28 13:26:15

标签: c++ cmake

我将把静态库链接到一些其他依赖项(已安装在系统中),然后使用该库,但是我的IDE在继承的内容中显示“ No such file or directory”,例如:

我的图书馆的

CMakeLists.txt:

find_package(lib1 REQUIRED)
target_link_libraries(${MY_MEGA_LIB_NAME} lib1::lib1)
target_include_directories(${MY_MEGA_LIB_NAME} PUBLIC ${LIB1_INCLUDE_DIR})

find_package(lib2 REQUIRED)
target_link_libraries(${MY_MEGA_LIB_NAME} lib2::lib2)
target_include_directories(${MY_MEGA_LIB_NAME} PUBLIC ${LIB2_INCLUDE_DIR})
使用我的库的项目的

CMakeLists.txt:

find_library(${CMAKE_BINARY_DIR}/lib/ MyMegaLib.a)
target_include_directories(${MY_MEGA_PROJECT} ${PROJECT_SOURCE_DIR}/include/MyMegaLib}

错误是这样的:

fatal error: lib1.h: No such file or directory
 #include <lib1.h>

我该怎么做才能正确继承包含项?

_ 我的库和可执行文件的完整层次结构:

pre-lib1, pre-lib2
^^
lib1 (installed at the CMAKE_INSTALL_PREFIX path)
^
MyMegaLib (static library)
^
MyProject(static library and an executable MyProject_tests)

因此,实际上我在尝试进行cmake时,收到关于RE2头文件的pre-lib1和pre-lib2的错误(prelib1.h:没有这样的文件或目录,preli2.h:没有这样的文件或目录) MyProject_tests。

1 个答案:

答案 0 :(得分:0)

据我所知,在我的项目中,是TARGET_LINK_LIBRARIES调用引入了库中导出的内容-在这种情况下,您是否有类似的东西? 像这样:

TARGET_LINK_LIBRARIES(${MY_MEGA_PROJECT} ${MY_MEGA_LIB_NAME})

但这是在同一CMake运行中指定包含目录/库时的情况。

当您想在另一次CMake运行中重用库构建时,可能必须import/export these targets及其包含目录/库依赖项等。库通常会在其构建/安装目录中生成一些.cmake文件。提供了这些目标。