从autotool迁移到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()

参考
https://gitlab.com/graphviz/graphviz/blob/master/cmake/FindLTDL.cmake
https://cmake.org/pipermail/cmake/2010-June/037579.html
https://github.com/nest/nest-simulator/blob/master/cmake/FindLTDL.cmake
https://github.com/fzi-forschungszentrum-informatik/schunk_svh_driver/blob/master/icmaker/CMakeModules/FindLtdl.cmake

Usage


find_package(Math REQUIRED)
find_package(LTDL REQUIRED)
target_link_libraries(guile  Math::Math LTDL::LTDL)

code:
https://github.com/PikachuHy/guile/blob/1.8-cmake/cmake/FindLTDL.cmake
https://github.com/PikachuHy/guile/blob/1.8-cmake/cmake/FindMath.cmake

#[=======================================================================[.rst:
FindLTDL
-----------

Find the LTDL libraries

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

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

``LTDL::LTDL``

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

This module will set the following variables if found:

``LTDL_INCLUDE_DIRS``
  where to find ltdl.h, etc.
``LTDL_LIBRARIES``
  the libraries to link against to use ltdl.
``LTDL_VERSION``
  version of the ltdl library found
``LTDL_FOUND``
  TRUE if found

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

# Look for the necessary header
find_path(LTDL_INCLUDE_DIR NAMES ltdl.h)
mark_as_advanced(LTDL_INCLUDE_DIR)

# Look for the necessary library
find_library(LTDL_LIBRARY NAMES ltdl)
mark_as_advanced(LTDL_LIBRARY)

find_program(LIBTOOL_EXECUTABLE
        NAMES glibtool libtool libtoolize
        )
if ( NOT LIBTOOL_EXECUTABLE STREQUAL "LIBTOOL_EXECUTABLE-NOTFOUND" )
    execute_process(
            COMMAND ${LIBTOOL_EXECUTABLE} --version
            RESULT_VARIABLE RESULT
            OUTPUT_VARIABLE LTDL_VAR_OUTPUT
            OUTPUT_STRIP_TRAILING_WHITESPACE
    )
    if ( RESULT EQUAL 0 )
        string( REGEX REPLACE ".* ([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1"
                LTDL_VERSION ${LTDL_VAR_OUTPUT} )
    endif ()
endif ()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LTDL
        REQUIRED_VARS LTDL_INCLUDE_DIR LTDL_LIBRARY
        VERSION_VAR LTDL_VERSION)

# Create the imported target
if(LTDL_FOUND)
    set(LTDL_INCLUDE_DIRS ${LTDL_INCLUDE_DIR})
    set(LTDL_LIBRARIES ${LTDL_LIBRARY})
    if(NOT TARGET LTDL::LTDL)
        add_library(LTDL::LTDL UNKNOWN IMPORTED)
        set_target_properties(LTDL::LTDL PROPERTIES
                IMPORTED_LOCATION             "${LTDL_LIBRARY}"
                INTERFACE_INCLUDE_DIRECTORIES "${LTDL_INCLUDE_DIR}")
    endif()
endif()
# https://android.googlesource.com/platform/external/eigen/+/master/cmake/FindStandardMathLibrary.cmake
# Look for the necessary library
# Look for the necessary header
find_path(MATH_INCLUDE_DIR NAMES math.h)
mark_as_advanced(MATH_INCLUDE_DIR)

# Look for the necessary library
find_library(MATH_LIBRARY NAMES m libm)
mark_as_advanced(MATH_LIBRARY)
include(CheckCSourceCompiles)
set(find_math_library_test_program
        "#include<math.h>
int main() { sin(0.0); log(0.0f); }")
set(CMAKE_REQUIRED_FLAGS "")
set(CMAKE_REQUIRED_LIBRARIES "m")
check_c_source_compiles(
        "${find_math_library_test_program}"
        math_library_linked_to_as_m)
if(math_library_linked_to_as_m)
    include(FindPackageHandleStandardArgs)
    find_package_handle_standard_args(Math REQUIRED_VARS MATH_LIBRARY)
endif()

# Create the imported target
if(Math_FOUND)
    set(MATH_LIBRARIES ${MATH_LIBRARY})
    if(NOT TARGET Math::Math)
        add_library(Math::Math UNKNOWN IMPORTED)
        set_target_properties(Math::Math PROPERTIES
                IMPORTED_LOCATION             "${MATH_LIBRARY}")
    endif()
endif()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值