gpt4 book ai didi

cmake - 如何使用 CMake 将静态库链接到可执行文件

转载 作者:行者123 更新时间:2023-12-04 11:51:00 24 4
gpt4 key购买 nike

在 CMake 中,我们使用 TARGET_LINK_LIBRARIES() 将共享库链接到库/可执行文件。

For example:
TARGET_LINK_LIBRARIES(ExecutableName xxx)
where ExecutableName - is the name of executable
xxx - is the library name.

据我了解,CMake 在 LINK_DIRECTORIES() 宏中提到的路径中搜索“libxxx.so”。
但是,如果我有一个名为“libxxx.a”的第三方库,那么如何使用 CMake 将该库链接到可执行文件。

提前谢谢你的帮助!

最佳答案

您应该始终尝试为 target_link_libraries 提供完整路径或 CMake 目标。

由于您似乎没有将依赖项构建为 CMake 项目的一部分,因此获取要链接的 CMake 目标的唯一方法是创建一个导入的目标。手动执行这通常很乏味,因此除非依赖项已经提供了带有导入目标的配置文件,否则您可能不想走这条路。导入的目标使用起来最方便,但前提是您可以让 CMake 为您编写。

所以,它是绝对路径。您显然不想在 CMakeLists.txt 中硬编码绝对库路径。正如您在问题中指出的那样,所需的行为是您只指定库的名称,CMake 应该能够自动确定其位置。这正是 find_library 为你做。

链接库 xxx ,你会做这样的事情:

find_library(LIB_LOCATION xxx)
target_link_libraries(ExecutableName ${LIB_LOCATION})

请注意 find_library提供了大量选项以进一步指定在何处查找所请求的库。摆脱您现有的 link_directories调用并将相应的路径作为提示添加到 find_library反而。

这种方法在将 CMake 代码移植到其他平台时更加灵活,并且在出现问题时比初始方法更容易调试。

关于cmake - 如何使用 CMake 将静态库链接到可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28536435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com