CMake check_function_exists 没有

CMake check_function_exists doesn't

本文关键字:没有 exists function CMake check      更新时间:2023-10-16

我正在学习 CMake 教程并与关联的项目文件进行交叉检查,但我被困在步骤 4 上。

说明将这些行添加到顶级 CMakeLists.txt 文件中:

# does this system provide the log and exp functions?
include (CheckFunctionExists)
check_function_exists (log HAVE_LOG)
check_function_exists (exp HAVE_EXP)

如前所述,这是一个微不足道的测试,因为地球上几乎每个系统都有logexp。但它失败了。生成生成文件时,我看到

-- Looking for log
-- Looking for log - not found
-- Looking for exp
-- Looking for exp - not found

如果我深入挖掘,运行cmake --trace,我看到以下行:

.../tutorial/src/CMakeLists.txt(19):  include( CheckFunctionExists )
/usr/share/cmake/Modules/CheckFunctionExists.cmake(32):  macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE )
.../tutorial/src/CMakeLists.txt(20):  check_function_exists(log HAVE_LOG )
/usr/share/cmake/Modules/CheckFunctionExists.cmake(33):  if(HAVE_LOG MATCHES ^HAVE_LOG$ )
.../tutorial/src/CMakeLists.txt(21):  check_function_exists(exp HAVE_EXP )
/usr/share/cmake/Modules/CheckFunctionExists.cmake(33):  if(HAVE_EXP MATCHES ^HAVE_EXP$ )

CheckFunctionExists.cmake文件中,该测试没有else条件。我是cmake的新手,但测试在我看来是真实的。我错过了什么?

CentOS 7, cmake 2.8.12.2

已知CheckFunctionExists有严重的缺点。请参阅文档。

在您的情况下,您可能会遇到第一个陷阱。函数logexp是许多平台上的固有内联函数。在链接时无法检测到它们。

建议的替换是CheckSymbolExists。不幸的是,您的 cmake 版本不支持此功能。您至少需要升级到 3.0.2 才能正常工作。