c++ - 使用平台特定依赖的跨平台库
问题描述
我很好奇如何创建一个看似特定于平台的依赖关系的跨平台库(使用 CMake 构建)。
例如,假设我使用 GLEW 或 OpenGL 创建了一个库,并且在开发过程中我下载了他们的 windows 适配(glew_x64-windows
或opengl_x64-windows
例如),我该如何确保我的库仍然具有我想要的跨平台可移植性?
可能我误解了“后缀”的意思windows
,或者我对跨平台库作为一个整体的理解很差,但如果不是这样,我的问题就成立了。
解决方案
最佳选择:通常您只需通过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)
推荐阅读
- python - 在 C++ 中从串行读取和解释数据
- amazon-web-services - CFN Guard - 基于参数的规则执行
- r - DPLYR 等效于具有多列的 n_distinct
- python - 如何重新训练变分自编码器并重现相同的结果
- python-3.x - UniqueConstraint Django 独一无二
- node.js - 如何将公共 npm 包添加到 Azure DevOps 包源
- javascript - 我正在学习并尝试在控制台中打印这些功能,但总是告诉我未捕获的引用错误:对象未定义
- reactjs - AGGrid 在 React 中使用 TypeScript 自定义 CellRenderer
- sql - foreach 注入在 mybatis 中不起作用
- c# - asp.net mvc 5 自定义应用程序中的 Microsoft 登录问题