首页 > 解决方案 > 使用平台特定依赖的跨平台库

问题描述

我很好奇如何创建一个看似特定于平台的依赖关系的跨平台库(使用 CMake 构建)。

例如,假设我使用 GLEW 或 OpenGL 创建了一个库,并且在开发过程中我下载了他们的 windows 适配(glew_x64-windowsopengl_x64-windows例如),我该如何确保我的库仍然具有我想要的跨平台可移植性?

可能我误解了“后缀”的意思windows,或者我对跨平台库作为一个整体的理解很差,但如果不是这样,我的问题就成立了。

标签: c++cmake

解决方案


最佳选择:通常您只需通过find_package让 cmake 为您查找库。这将获得该库的平台特定版本,该版本已安装在正在执行编译的系统上。在这种情况下,您不必担心您在哪个平台上。

不太好的选择:如果您已经为所有目标系统下载了特定于平台的库的预构建,则可以为每个平台创建一个导入的库。像这样的东西应该可以工作,但我还没有测试过:

if(WIN32)
  add_library(glew STATIC IMPORTED)
  set_property(TARGET glew PROPERTY
             IMPORTED_LOCATION "path/to/libglew-windows.a")
  target_include_directories(glew SYSTEM AFTER PUBLIC "path/to/windows/include")
else()
  add_library(glew STATIC IMPORTED)
  set_property(TARGET glew PROPERTY
             IMPORTED_LOCATION "path/to/libglew-linux.a")
  target_include_directories(glew SYSTEM AFTER PUBLIC "path/to/linux/include")
endif()

# Then you can use it as a platform-independant target:
target_link_libraries(my_app PRIVATE glew)

推荐阅读