我将把静态库链接到一些其他依赖项(已安装在系统中),然后使用该库,但是我的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。
答案 0 :(得分:0)
据我所知,在我的项目中,是TARGET_LINK_LIBRARIES
调用引入了库中导出的内容-在这种情况下,您是否有类似的东西?
像这样:
TARGET_LINK_LIBRARIES(${MY_MEGA_PROJECT} ${MY_MEGA_LIB_NAME})
但这是在同一CMake运行中指定包含目录/库时的情况。
当您想在另一次CMake运行中重用库构建时,可能必须import/export these targets及其包含目录/库依赖项等。库通常会在其构建/安装目录中生成一些.cmake文件。提供了这些目标。