代码之家  ›  专栏  ›  技术社区  ›  Sergey Kolesnik

使用包装文件展开FindModule.cmake逻辑

  •  0
  • Sergey Kolesnik  · 技术社区  · 4 年前

    FindPackage.cmake 剧本有些脚本(即SDL)在cmake本身中可用,因此查找包相对容易。
    虽然在我的例子中,SDL搜索脚本(SDL、SDL_图像、SDL_混合器)几乎从现代cmake出现(至少3.1版)起就可以使用,但它们不提供现代方法的手段-它们不定义导入的cmake目标。SDL作为目标仅在3.19之后才可用,并且它没有定义 IMPORTED_LOCATION
    因此,合理的做法是定义这些目标和属性。
    FindSDL.cmake 从较新的cmake捆绑包中复制并粘贴修改。
    但我想保持cmake包(或来自外部源的另一个足够好的脚本)中的这些文件完好无损,只需包装它们。
    CMakeLists.txt 我想:

    list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules")
    find_package(SDL REQUIRED)
    find_package(SDL_mixer REQUIRED)
    find_package(SDL_image REQUIRED)
    

    cmake/modules/FindSDL.cmake :

    find_package(SDL REQUIRED)
    
    if (NOT TARGET SDL::SDL)
    # add target and properties here
    endif()
    

    1. find_package 写包装时 FindPackage.cmake FindPackage.cmake 文件
    2. 是否可以处理和\或重定向 查找包 REQUIRED ?

    这看起来很有希望:
    How to execute CMake's default find module from my own find module with the same name?

    0 回复  |  直到 4 年前
        1
  •  1
  •   u-235    4 年前

    首先想到的是从中删除当前路径 CMAKE_MODULE_PATH 打电话之前 find_package()

    list(REMOVE_ITEM CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
    find_package(SDL)
    list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
    
    if (NOT TARGET SDL::SDL)
    # add target and properties here
    endif()