我正在使用 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()
不幸的是,如果这样做,变量 HAVE_UNITTESTXX 将存储在缓存中。如果我在我的系统中安装 UnitTest++ 库,cmake 仍然会抱怨未安装 UnitTest++.h。我可以手动删除缓存,但标准的查找包功能不需要这样做。我也可以像这样升级代码
CHECK_INCLUDE_FILE_CXX("UnitTest++.h" HAVE_UNITTESTXX)
IF(NOT HAVE_UNITTESTXX)
UNSET(HAVE_UNITTESTXX CACHE)
message( FATAL_ERROR "UnitTest++ is not found" )
ENDIF()
此解决方案有效,但看起来不太好。我想知道一种 cmake 方法来完成这项任务。
最好的祝福!