我正在使用cmake来管理我项目的编译,这是我第一次使用cmake.这个工具非常方便,因为有太多的脚本和函数可以检查给定计算机上是否安装了所有必需的库.但是,有时这些通用的sripts不包含某些特定情况,或者它们根本不适用于给定的库.我的问题如下:
什么是正确的cmake风格的方式来判断包含路径中给定的头文件(hpp或h)是否可用?
理由:
最直接的方法可能是使用CHECK_INCLUDE_FILE宏.例如,如果我想使用UnitTest ++库,我可以写
CHECK_INCLUDE_FILE_CXX("UnitTest++.h" HAVE_UNITTESTXX)
IF(NOT HAVE_UNITTESTXX)
message( FATAL_ERROR "UnitTest++ is not found" )
ENDIF()
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果以这种方式完成,变量HAVE_UNITTESTXX将存储在缓存中.如果我在我的系统中安装UnitTest ++库,cmake仍然会抱怨UnitTest ++.我没有安装.我可以手动删除缓存,但标准的查找包函数不需要.我也可以像这样升级代码
CHECK_INCLUDE_FILE_CXX("UnitTest++.h" HAVE_UNITTESTXX)
IF(NOT HAVE_UNITTESTXX)
UNSET(HAVE_UNITTESTXX CACHE)
message( FATAL_ERROR "UnitTest++ is not found" )
ENDIF()
Run Code Online (Sandbox Code Playgroud)
这个解决方案有效,但看起来并不好看.我想知道一种cmake方式来完成这项任务.
最好的祝福!