【问题标题】:Linking a library that not have a standarized name/extension链接没有标准化名称/扩展名的库
【发布时间】:2015-05-08 17:01:31
【问题描述】:

如果您在 cmake 中使用命令target_link_libraries,链接器将在链接时搜索名称符合某些条件的库。例如:

使用以下命令:

target_link_libraries(some_target  some_lib)

在 Linux 中,链接器将搜索:libsome_lib.so,而在 Windows 中,链接器将搜索 some_lib.lib(在 Windows 中,我正在编译生成的 VS 项目来自 cmake 项目)。

由于我的应用程序的部署要求,这些库没有扩展名,并且必须在两个操作系统中调用相同的名称(例如 some_lib)。

我如何告诉 cmake 搜索这样的库?

我想输入完整路径就可以了,但是,还有 另一种 什么方法可以做到这一点?

编辑:指定库的完整路径不起作用。

【问题讨论】:

  • 重点是你不应该再链接库名,如果是外部库,你应该传递find_package的输出,如果它是在当前构建的,则传递目标名称项目,或者如果您使用 cmake > 3.0,则只需编写 namespace::lib(这也将添加包含路径和定义)。您确定 find_package et similia 不适用于您的情况吗?
  • @sbabbi 我正在阅读有关find_package 的信息,看来我必须编写自定义的“包查找器”才能找到我的库。这比我想做的要多,但直到现在它似乎是唯一可行的解​​决方案。

标签: c++ linker cmake


【解决方案1】:

我从未测试过,但 CMake Wiki Docs 引用这些变量来指定库扩展:

CMAKE_FIND_LIBRARY_SUFFIXES 
CMAKE_IMPORT_LIBRARY_SUFFIX  

Windows 特定的。似乎是只读的。使用SET_TARGET_PROPERTIES

CMAKE_LINK_LIBRARY_SUFFIX     

Windows 特定的。

CMAKE_SHARED_LIBRARY_SUFFIX  

似乎是只读的。使用SET_TARGET_PROPERTIES

CMAKE_STATIC_LIBRARY_SUFFIX   

似乎是只读的。使用SET_TARGET_PROPERTIES

【讨论】:

  • 谢谢,我试试看。
  • 它在 Windows 上不起作用,我没有在 linux 中尝试过,因为我需要在两个操作系统中都可以工作。另一方面,我看不到如何使用SET_TARGET_PROPERTIES 来更改Windows 的这些变量的只读属性。无论如何谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 2017-12-15
  • 1970-01-01
  • 2021-09-26
  • 2015-03-07
相关资源
最近更新 更多