【问题标题】:Import my own shared library with CMakelists使用 CMakelists 导入我自己的共享库
【发布时间】:2017-05-13 17:45:14
【问题描述】:

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

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

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

【问题讨论】:

  • 就我在 CMake 中所关心的而言,有两种方法可以使用库。如果您不确定现有(和放置)库,您应该使用find 指令。但是如果你知道你应该直接使用库。所以,如果你的另一个 CMakeLists.txt 是使用 libmylib.so 的项目的一部分,你不应该使用它的安装版本。
  • 谢谢。 CMakeLists 是另一个项目的一部分
  • 在这种情况下CMakeList.txt 应该使用find 指令。但根据 CMake 模块(如 FindMyLib.cmake)应该随库一起提供。

标签: cmake shared-libraries


【解决方案1】:

CMake 不仅允许您安装库,还可以安装可供其他项目使用的文件来导入有关库目标的所有详细信息。这使得导入的目标几乎可以被视为导入目标的一部分。

第一步是为你的库项目添加额外的安装细节:

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

请注意在您原来的 install() 呼叫中添加的 EXPORT myproj-targets。这告诉 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()this wiki article 中找到有关所有这些工作原理的合理解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-05
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 2011-03-18
    • 2018-01-15
    相关资源
    最近更新 更多