在 CMake 中替换 AC_CHECK_LIB
Replace AC_CHECK_LIB in CMake
我正在将一个项目从 Autotools 转换到 CMake。
我们有一个 configure.ac
文件,其中包含以下语句:
AC_CHECK_LIB([gsuffix], [gsuffix_create], [], AC_MSG_ERROR([Can not find gsuffix library]))
我想将其替换为 cmake,但不确定如何(它没有 pkg-config)
我需要的是:
- 检查 libgsuffix 是否存在并找到路径。
- 检查 gsuffix_create 存在于 libgsuffix
中
- 在编译中添加 -lgsuffix - 我想我知道该怎么做。
谁能给我指出正确的方向?
没有一对一的翻译。通常,对于 CMake,您不会检查每个 header 和每个库是否确实有效。如果您找到该文件,您就认为它可以解决问题。
也许 find_package 适合您,这取决于有人已经编写了这样的测试或者您的库提供了相应的配置文件。
Find_library 用于查找库,但按名称。
如果您真的必须检查您的库是否正常工作,请使用 CheckLibraryExists。
如前所述,无论如何都找不到用一个命令来做到这一点。
我没有足够的时间来了解如何做一些完全通用的事情,所以我可以提供我的骨架 FindGSUFFIX.cmake:
FIND_LIBRARY(GSUFFIX_LIBRARY NAMES gsuffix)
INCLUDE(CheckLibraryExists)
CHECK_LIBRARY_EXISTS(gsuffix gsuffix_create ${GSUFFIX_LIBRARY} GSUFFIX_VERIFIED)
# Handle the QUIETLY and REQUIRED arguments and set PCRE_FOUND to TRUE if all listed variables are TRUE.
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GSUFFIX DEFAULT_MSG GSUFFIX_LIBRARY GSUFFIX_VERIFIED)
MARK_AS_ADVANCED(GSUFFIX_LIBRARY)
我正在将一个项目从 Autotools 转换到 CMake。
我们有一个 configure.ac
文件,其中包含以下语句:
AC_CHECK_LIB([gsuffix], [gsuffix_create], [], AC_MSG_ERROR([Can not find gsuffix library]))
我想将其替换为 cmake,但不确定如何(它没有 pkg-config) 我需要的是:
- 检查 libgsuffix 是否存在并找到路径。
- 检查 gsuffix_create 存在于 libgsuffix 中
- 在编译中添加 -lgsuffix - 我想我知道该怎么做。
谁能给我指出正确的方向?
没有一对一的翻译。通常,对于 CMake,您不会检查每个 header 和每个库是否确实有效。如果您找到该文件,您就认为它可以解决问题。
也许 find_package 适合您,这取决于有人已经编写了这样的测试或者您的库提供了相应的配置文件。
Find_library 用于查找库,但按名称。
如果您真的必须检查您的库是否正常工作,请使用 CheckLibraryExists。
如前所述,无论如何都找不到用一个命令来做到这一点。
我没有足够的时间来了解如何做一些完全通用的事情,所以我可以提供我的骨架 FindGSUFFIX.cmake:
FIND_LIBRARY(GSUFFIX_LIBRARY NAMES gsuffix)
INCLUDE(CheckLibraryExists)
CHECK_LIBRARY_EXISTS(gsuffix gsuffix_create ${GSUFFIX_LIBRARY} GSUFFIX_VERIFIED)
# Handle the QUIETLY and REQUIRED arguments and set PCRE_FOUND to TRUE if all listed variables are TRUE.
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GSUFFIX DEFAULT_MSG GSUFFIX_LIBRARY GSUFFIX_VERIFIED)
MARK_AS_ADVANCED(GSUFFIX_LIBRARY)