3

CMake 很棒,尤其是有很多模块(FindOOXX)。但是,当涉及到编写FindXXX模块时,您的项目所依赖的库 XXX,对于非 cmake 专家来说并不是那么容易处理。我有时会遇到一个不支持 CMake 的库,我喜欢为它制作一个。我想知道在编写/测试 cmake 模块时是否有任何交互式 shell?

4

1 回答 1

1

您是FindXXX为项目“XXX”写作还是“XXX”是您要查找的项目的依赖项?如果是前者,您应该改为编写一个名为XXX-config.cmake(或XXXConfig.cmake) 的文件并将其安装到find_package. 通常,XXX-config.cmake文件用于预计由 CMake 找到(并由项目本身安装)的项目,FindXXX.cmake文件用于不支持 CMake 的项目(通常必须支持查找任何版本的 XXX)。

也就是说,对于FindXXX.cmake,通常您只需要几个find_file(例如,对于标头)、一些find_library调用,甚至只需要一个pkg_check_modulefromFindPkgConfig.cmake后跟一个find_package_handle_standard_args调用(用于include(FindPackageHandleStandardArgs)获取它)。FPHSA 使编写正确的 Find 模块变得轻而易举。

对于XXX-config.cmake文件,我通常使用configure_file生成两个版本:一个用于安装(包括您的install(EXPORT)文件),另一个用于构建树(由export()调用生成)。使用它,可以准确设置其他有用的变量,例如“使用了哪个确切版本的 Boost”或“是否编译了 Python 支持”,以便依赖项目可以更好地了解依赖项的外观。

我最近还发现 CMake 附带了CMakePackageConfigHelpers应该有助于制作这些文件的模块。看起来有相当多的文档。

于 2013-09-19T00:20:08.447 回答