【问题标题】:cmake: how to link a library which has a lib prefix on windowscmake:如何在 Windows 上链接具有 lib 前缀的库
【发布时间】:2016-05-21 02:57:31
【问题描述】:

在 GNU/Linux 上,约定是将库的名称(我们称之为 foo)传递给不带 lib 前缀的 target_link_libraries(否则它会尝试链接 liblibfoo.so)。但是,在 Windows 上,当我要求与“foo”链接时,它会尝试查找不存在的“foo.lib”,因为该库名为 libfoo.lib。有没有办法指示 cmake 添加 lib 前缀,而无需使用另一个 if(WIN32) 块?

【问题讨论】:

    标签: windows visual-c++ cmake


    【解决方案1】:

    使用命令find_library 搜索库的绝对路径。您可以使用NAMES 选项指定所有可能的搜索库名称:

    find_library(FOO_LIBRARY NAMES foo libfoo)
    

    然后使用此命令的结果与库链接:

    target_link_libraries(my_exec ${FOO_LIBRARY})
    

    【讨论】:

    • 不,我说的是没有 cmake 模块的库。
    • 不涉及 CMake 模块。命令 find_library 是 CMake 内部的,就像 target_link_libraries 本身一样。
    • 谢谢,我误会了。我以为你说 find_package 出于某种原因。我不知道 find_library,它确实找到了图书馆。但是我不喜欢它与完整的绝对路径链接,所以我想我现在会坚持使用条件。
    • 如果您担心 RPATH 中用于创建二进制文件的库的绝对路径,那么这仅由 CMake默认完成。使用 CMake 变量和属性,您可以将 RPATH 调整为您需要的值。
    • 谢谢,我去看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 2012-05-19
    • 2016-01-08
    相关资源
    最近更新 更多