cmake - 如何将外部路径(include、lib)和定义包装到 cmake 中的目标中

标签 cmake libraw

一些库(例如LibRaw)不是提供目标,而是生成包含有关包含路径、库路径和编译定义的信息的变量。对于LibRaw,vcpkg推荐以下用法:

target_compile_definitions(main PRIVATE ${LibRaw_DEFINITIONS})
target_include_directories(main PRIVATE ${LibRaw_INCLUDE_DIR})
target_link_libraries(main PRIVATE ${LibRaw_LIBRARIES})

但是,我宁愿在使用链接库方面保持一致

target_link_libraries(main PRIVATE LibRaw)

有没有办法将所有提供的变量包装到目标中。

最佳答案

您应该能够创建自己的interface library并定义应应用于具有 INTERFACE 可见性的 main 目标的属性:

add_library(MyLibRaw INTERFACE)
target_compile_definitions(MyLibRaw INTERFACE ${LibRaw_DEFINITIONS})
target_include_directories(MyLibRaw INTERFACE ${LibRaw_INCLUDE_DIR})
target_link_libraries(MyLibRaw INTERFACE ${LibRaw_LIBRARIES})

这样,每个链接 MyLibRaw 的链接目标都将继承这些属性。

target_link_libraries(main PRIVATE MyLibRaw)

请注意,如果您在多个项目中重用该目标,则可能需要创建一个提供此目标的查找脚本,如果您执行 find_package(MyImports COMPONENTS LibRaw) 或类似操作...

关于cmake - 如何将外部路径(include、lib)和定义包装到 cmake 中的目标中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71037373/

相关文章:

c++ - 使用 Cmake 的 RelWithDebInfo 作为默认构建类型

c - 使用 dlopen 访问 CMake 生成的动态库

python - Rawpy 原始图像模式

c - 如何使用LibRaw(c++)获取CR2图像的原始数据

python - 了解rawpy中raw_pattern的输出

cmake - 如果 Cmake find_package 找不到包,如何提供自定义错误消息?

c++ - CMAKE:如何安装目标的依赖项

CMake添加-Dlibname_EXPORTS编译定义

c++ - LibRaw 和 OpenCV