CMake库前缀/后缀

杰夫·M

我需要链接到第三方预构建的共享库。在Windows上,这意味着与链接Third_party.lib;在Linux / Android上,这意味着与链接libThird_party.so因此,为了实现跨平台性,我尝试将其编写为:

${CMAKE_IMPORT_LIBRARY_PREFIX}Third_party${CMAKE_IMPORT_LIBRARY_SUFFIX}

在Windows上运行正常,但在Linux / Android上,这些变量为空白。我知道Linux / Android没有导入库,但是尽管如此,这些变量实际上是一个很大的麻烦。而且将变量更改为CMAKE_SHARED_LIBRARY_...也不起作用,因为即使Linux / Android随后会像我想要的那样寻找lib / .so,Windows也会寻找我不想要的.dll。

似乎我可以通过使用共享库变量中的值填充导入库变量(仅在Linux上)来解决此问题。但是...这真的是最好的方法吗?我不可能是第一个碰到这个问题的人。

马库斯·穆勒(MarcusMüller)

通常,您让CMake及其助手完成确定正确名称的工作。对于您的第三方库,很可能已经有一个Find<Library>.cmake脚本了。

如果没有:这是FindUSB.cmakeGNU Radio摘录的

if(NOT LIBUSB_FOUND)
  pkg_check_modules (LIBUSB_PKG libusb-1.0)
  find_path(LIBUSB_INCLUDE_DIR NAMES libusb.h
    PATHS
    ${LIBUSB_PKG_INCLUDE_DIRS}
    /usr/include/libusb-1.0
    /usr/include
    /usr/local/include
  )

  find_library(LIBUSB_LIBRARIES NAMES usb-1.0 usb
    PATHS
    ${LIBUSB_PKG_LIBRARY_DIRS}
    /usr/lib
    /usr/local/lib
  )

if(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
  set(LIBUSB_FOUND TRUE CACHE INTERNAL "libusb-1.0 found")
  message(STATUS "Found libusb-1.0: ${LIBUSB_INCLUDE_DIR}, ${LIBUSB_LIBRARIES}")
else(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)
  set(LIBUSB_FOUND FALSE CACHE INTERNAL "libusb-1.0 found")
  message(STATUS "libusb-1.0 not found.")
endif(LIBUSB_INCLUDE_DIR AND LIBUSB_LIBRARIES)

mark_as_advanced(LIBUSB_INCLUDE_DIR LIBUSB_LIBRARIES)

endif(NOT LIBUSB_FOUND)

请注意,该pkg_check_modules指令和该find_library指令会为您提供正确的内容,而无需您手动添加后缀等。

你可能会想加你希望你的.dll文件是在路径PATHS的争论find_pathfind_library(这些都是指针的CMake知道去哪里找)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R中的前缀后缀和前缀后缀

来自分类Dev

setNames后缀为前缀

来自分类Dev

for循环中的前缀与后缀

来自分类Dev

前缀和后缀增量

来自分类Dev

删除通用前缀或后缀

来自分类Dev

Excel前缀或后缀

来自分类Dev

前缀数等于后缀

来自分类Dev

前缀或后缀增量(或减量)的用法

来自分类Dev

前缀/后缀的Levenshtein距离的替代

来自分类Dev

提取“星号前缀”后缀的域

来自分类Dev

PySpark:带前缀/后缀的选择

来自分类Dev

前缀或后缀增量(或减量)的用法

来自分类常见问题

如何为每个列名添加后缀(或前缀)?

来自分类Dev

数组的最长公共前缀和后缀

来自分类Dev

for循环中的前缀和后缀增量

来自分类Dev

前缀和后缀运算符Java

来自分类Dev

在Prolog中交换列表前缀和后缀

来自分类Dev

教义获取没有前缀或后缀的数组

来自分类Dev

前缀和后缀运算符C ++

来自分类Dev

检查带有前缀和后缀的单词

来自分类Dev

带有特殊前缀/后缀的调用函数

来自分类Dev

使用数组时后缀/前缀如何工作

来自分类Dev

前缀和后缀opperand之间的区别?

来自分类Dev

C#中文件后缀生成的前缀

来自分类Dev

使用批处理替换前缀和后缀

来自分类Dev

Fiddler输出的前缀和后缀未知

来自分类Dev

它如何获得相同的前缀和后缀?

来自分类Dev

在C ++中构建前缀Trie(后缀Trie)

来自分类Dev

检查带有前缀和后缀的单词