当库使用CMake定义构建并遇到为其自身构建安装软件包的麻烦时,就会出现XXXConfig.cmake
。
如果库无法将其目标导出到CMake,则CMake会尝试通过提供FindXXX.cmake
脚本来查找此类库来缩小差距。
在文档中,首先尝试FindXXX.cmake
(模块模式),只有失败后,它才尝试使用XXXConfig.cmake
(配置模式)。但这对我来说似乎真的很倒退。
问题是,例如,我从源代码构建了CURL,并且ConfigXXX产生了与FindXXX不同的目标名称,因此,在尝试使用它时,它会失败,因为FindXXX负责find_package请求并加载了另一个目标名称超出了我的预期。
我至少可以告诉CMake反过来做事吗?首先配置模式。
我知道我可以完全禁用模块模式,但我希望将其作为后备选项。
答案 0 :(得分:3)
只需在{em> CONFIG 模式下使用find_package
,检查其结果,如果结果为假,则以 MODULE 模式重复调用:
# First time do not use common *REQUIRED* but use QUIET for do not output error messages on fail.
find_package(XXX CONFIG QUIET)
if(NOT XXX_FOUND)
# Previous call has been failed. Fallback with MODULE mode.
find_package(XXX MODULE REQUIRED) # Now it is OK to use REQUIRED if needed.
# ... There could be additional actions for wrap result "as if" CONFIG mode.
endif()
# ... use XXX
答案 1 :(得分:2)
您可以尝试此find_package(XXX CONFIG REQUIRED)
。
查看链接:mysqli_fetch_assoc
答案 2 :(得分:-1)