CMake check_function_exists 没有
CMake check_function_exists doesn't
我正在学习 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)
如前所述,这是一个微不足道的测试,因为地球上几乎每个系统都有log
和exp
。但它失败了。生成生成文件时,我看到
-- 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
有严重的缺点。请参阅文档。
在您的情况下,您可能会遇到第一个陷阱。函数log
和exp
是许多平台上的固有内联函数。在链接时无法检测到它们。
建议的替换是CheckSymbolExists
。不幸的是,您的 cmake 版本不支持此功能。您至少需要升级到 3.0.2 才能正常工作。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 如果没有malloc,链表实现将失败
- 数组索引的值没有增加
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 变量没有改变?通过向量的函数调用
- 没有名称的C++模板参数
- 在线编译器中的分段C++没有打印消息
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 没有用于初始化C++中的变量模板的匹配构造函数
- 调用'begin(int [n])'没有匹配函数
- 使用C++程序合并排序没有得到正确的输出
- 为什么在这个代码结束循环中没有得到结束
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- 没有显式声明的int[]中的foreach