从autotool迁移到cmake:编写FindGMP.cmake

找到一些实现
https://graphics.rwth-aachen.de:9000/OpenFlipper-Free/OpenFlipper-Free/blob/ps/cmake/FindGMP.cmake
https://gitlab.inria.fr/batsim/batsched/blob/master/cmake/Modules/FindGMP.cmake
https://intellij-support.jetbrains.com/hc/en-us/community/posts/360004135300-How-to-use-GMP-with-Cmake-on-CLion-
https://www.reddit.com/r/cmake/comments/4qozat/how_to_use_gmp/
https://github.com/rhalstea/p4c/blob/052f00935b72c106dbc87c1be1dabd19e6844d1d/cmake/FindLibGmp.cmake

然后参考 FindSQLite3.cmake 自己写了一个
最后的用法

find_package(GMP REQUIRED)
target_link_libraries(guile  GMP::GMP)

实现代码
见:https://github.com/PikachuHy/guile/blob/1.8-cmake/cmake/FindGMP.cmake

#[=======================================================================[.rst:
FindGMP
-----------

Find the GMP libraries

IMPORTED targets
^^^^^^^^^^^^^^^^

This module defines the following :prop_tgt:`IMPORTED` target:

``GMP::GMP``

Result variables
^^^^^^^^^^^^^^^^

This module will set the following variables if found:

``GMP_INCLUDE_DIRS``
  where to find gmp.h, etc.
``GMP_LIBRARIES``
  the libraries to link against to use GMP.
``GMP_VERSION``
  version of the GMP library found
``GMP_FOUND``
  TRUE if found

#]=======================================================================]

# Look for the necessary header
find_path(GMP_INCLUDE_DIR NAMES gmp.h)
mark_as_advanced(GMP_INCLUDE_DIR)

# Look for the necessary library
find_library(GMP_LIBRARY NAMES gmp libgmp)
mark_as_advanced(GMP_LIBRARY)

if(GMP_INCLUDE_DIR)
    file(STRINGS ${GMP_INCLUDE_DIR}/gmp.h __GNU_MP_VERSION_ver_line
            REGEX "^#define __GNU_MP_VERSION  *[0-9]"
            LIMIT_COUNT 1)
    file(STRINGS ${GMP_INCLUDE_DIR}/gmp.h __GNU_MP_VERSION_MINOR_ver_line
            REGEX "^#define __GNU_MP_VERSION_MINOR  *[0-9]"
            LIMIT_COUNT 1)
    file(STRINGS ${GMP_INCLUDE_DIR}/gmp.h __GNU_MP_VERSION_PATCHLEVEL_ver_line
            REGEX "^#define __GNU_MP_VERSION_PATCHLEVEL  *[0-9]"
            LIMIT_COUNT 1)
    string(REGEX MATCH "[0-9]" GMP_VERSION_MAJOR "${__GNU_MP_VERSION_ver_line}")
    string(REGEX MATCH "[0-9]" GMP_VERSION_MINOR "${__GNU_MP_VERSION_MINOR_ver_line}")
    string(REGEX MATCH "[0-9]" GMP_VERSION_PATCH "${__GNU_MP_VERSION_PATCHLEVEL_ver_line}")
    set(GMP_VERSION "${GMP_VERSION_MAJOR}.${GMP_VERSION_MINOR}.${GMP_VERSION_PATCH}")
endif()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GMP
        REQUIRED_VARS GMP_INCLUDE_DIR GMP_LIBRARY
        VERSION_VAR GMP_VERSION)

# Create the imported target
if(GMP_FOUND)
    set(GMP_INCLUDE_DIRS ${GMP_INCLUDE_DIR})
    set(GMP_LIBRARIES ${GMP_LIBRARY})
    if(NOT TARGET GMP::GMP)
        add_library(GMP::GMP UNKNOWN IMPORTED)
        set_target_properties(GMP::GMP PROPERTIES
                IMPORTED_LOCATION             "${GMP_LIBRARY}"
                INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}")
    endif()
endif()

你可能感兴趣的:(从autotool迁移到cmake:编写FindGMP.cmake)