使用 CMakelists 导入我自己的共享库

Import my own shared library with CMakelists

我在 CMakeLists.txt 中创建了一个共享库,方法是添加:

add_library(mylib SHARED ${SourceDir})
install (TARGETS mylib DESTINATION lib)

现在我可以在安装后的正确文件夹中看到文件 libmylib.so,但我不确定如何将其导入另一个单独项目的 CMakeLists.txt

CMake 不仅允许您安装库,它还可以安装可供另一个项目使用的文件,以导入有关库目标的所有详细信息。这允许导入的目标被视为几乎相同,就好像它是导入目标的一部分一样。

第一步是向您的图书馆项目添加额外的安装细节:

add_library(mylib SHARED ${SourceDir})
install(TARGETS mylib
        EXPORT myproj-targets
        DESTINATION lib
)
install(EXPORT myproj-targets
        DESTINATION lib/myproj
)

请注意添加的 EXPORT myproj-targets 到您原来的 install() 调用。这告诉 CMake 将您的 mylib 目标包含在目标列表中,它将作为导出集 myproj-targets 的一部分导出,第二个 install() 然后指示 CMake 作为安装的一部分生成步骤。

在您要使用该库的其他项目中,您只需要 include() 上面的第二个 install() 调用将创建的文件。假设您安装到 ${installBase},下面将导入上面导出的详细信息并使 mylib 目标可直接使用:

include("${installBase}/lib/cmake/myproj-targets.cmake)
add_executable(myexe exeSources.cpp)
target_link_libraries(myexe PRIVATE mylib)

您可以从 CMake documentation for install() and this wiki article 中找到有关所有这些工作原理的合理解释。