通常find_package(foo)
将定义
${FOO_FOUND}
${FOO_INCLUDE_DIRS}
${FOO_LIBRARIES}
但CMake文档中仅提及${FOO_FOUND}
。有些图书馆不遵守这一规则。比如Glog。
find_package()
有两种模式。一种是模块模式,它使用FindFoo.cmake
。另一种是配置模式,它使用foo-config.cmake
。
foo-config.cmake
由foo的维护者提供,而FindFoo.cmake
可能是由其他人编写的。我对吗 ?关于如何在开发人员之间定义变量是否达成共识?
"导入的目标"是CMake 2.6之后的新功能,它可以提供更好的查找库的方法。那么${FOO_INCLUDE_DIRS}
${FOO_LIBRARIES}
的使用应该被视为传统方式吗?或者他们应该兼容兼容性?
我发现建议定义这三个变量的两个链接:
https://cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file https://coderwall.com/p/qej45g/use-cmake-enabled-libraries-in-your-cmake-project-iii
答案 0 :(得分:0)
对于配置文件和查找宏,没有真正强制的模式可以设置哪些变量。通常,每个作者都可以决定要定义哪些变量以及如何调用它们。对于提供的查找marcos,这些变量通常记录在cmake手册中,例如至于boost。
我多年来看到的常见陷阱的一个例子是,有些包定义*_INCLUDE_DIRS
,而其他包使用单数*_INCLUDE_DIR
。
所以,在我看来,你能做的最好的事情就是浏览cmake文档中提供的查找宏,并从那里得出de factor共识。