You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求CMake下简洁直接的find_package配套配置文件实现示例

mydep依赖CMake配置文件示例

目录结构

先确认你的依赖目录结构如下:

mydep/
├── include/
│   └── mydep.h
├── lib/
│   ├── mydep.lib
│   └── mydep.dll
├── mydep-config.cmake
└── mydep-target.cmake

mydep-config.cmake 内容

# 获取当前配置文件所在目录
get_filename_component(MYDEP_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)

# 引入目标配置文件
include("${MYDEP_CMAKE_DIR}/mydep-target.cmake")

# 校验核心文件是否存在
if(NOT EXISTS "${MYDEP_INCLUDE_DIR}/mydep.h" OR NOT EXISTS "${MYDEP_LIB_DIR}/mydep.lib")
    message(FATAL_ERROR "mydep依赖文件缺失,请检查include和lib目录")
endif()

mydep-target.cmake 内容

# 定义依赖的基础路径
set(MYDEP_INCLUDE_DIR "${MYDEP_CMAKE_DIR}/include")
set(MYDEP_LIB_DIR "${MYDEP_CMAKE_DIR}/lib")

# 创建导入式目标
add_library(mydep SHARED IMPORTED)

# 配置目标的头文件搜索路径(自动传递给链接此目标的项目)
set_target_properties(mydep PROPERTIES
    INTERFACE_INCLUDE_DIRECTORIES "${MYDEP_INCLUDE_DIR}"
)

# 配置Windows平台的导入库和动态库路径
set_target_properties(mydep PROPERTIES
    IMPORTED_IMPLIB "${MYDEP_LIB_DIR}/mydep.lib"
    IMPORTED_LOCATION "${MYDEP_LIB_DIR}/mydep.dll"
)

# 自定义函数:将mydep.dll复制到目标程序的输出目录
function(copy_mydep_dll target)
    add_custom_command(TARGET ${target} POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "${MYDEP_LIB_DIR}/mydep.dll"
        $<TARGET_FILE_DIR:${target}>
        COMMENT "Copying mydep.dll to output directory..."
    )
endfunction()

在你的项目中使用

在项目根目录的CMakeLists.txt里添加以下内容:

# 查找mydep依赖(需确保mydep根目录在CMAKE_PREFIX_PATH中,或通过-DMYDEP_DIR指定路径)
find_package(mydep REQUIRED)

# 创建你的目标程序
add_executable(myapp main.cpp)

# 链接mydep依赖
target_link_libraries(myapp PRIVATE mydep)

# 调用函数复制DLL到输出目录
copy_mydep_dll(myapp)

额外说明

  • 若需区分32/64位架构,可在lib目录下拆分x86/x64子目录,然后在配置文件中通过CMAKE_SIZEOF_VOID_P判断加载对应路径的库
  • 运行CMake时,可通过-DCMAKE_PREFIX_PATH=/path/to/mydep指定依赖的根目录

内容的提问来源于stack exchange,提问作者Sean Michael McGhee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:40:28