CMake Tutorial(4)——Adding System Introspection

来源:互联网 发布:linux ftp连接数 编辑:程序博客网 时间:2024/05/16 08:51

接下来,我们来考虑向工程中加入一些代码,取决于目标平台可能没有提供的功能。我们接着以前的例子,现在我们来添加一些代码用于判断目标平台是否提供了log()和exp()这两个函数。当然绝大多数的平台都提供了这两个函数,在这里只是为了演示如何来判断目标平台是否有我所需要的函数。如果目标平台有log()函数,我们就在mysqrt函数中调用它计算平方根。现在我们在工程顶层目录的CMakeLists.txt文件中使用CheckFunctionExists.cmake宏来检查所需函数的可用性。内容如下:

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

接着我们需要修改TutorialConfig.h.in文件,在该文件中定义HAVE_LOG和HAVE_EXP如果CMake在目标平台找到了它们:

#cmakedefine HAVE_LOG#cmakedefine HAVE_EXP

需要注意的是,在文件CMakeLists.txt中用于CheckFunctionExists.cmake宏的使用需要在configure命令的前面。因为configure会立即使用当前的配置去设置TutorialConfig.h文件。最后我们在mysqrt函数中添加一下内容去计算平方根,如果exp()和log()函数可用的话:

#if defined (HAVE_LOG) && defined (HAVE_EXP)    result = exp(log(x) * 0.5);#else    ...#endif
0 0
原创粉丝点击