CMake 很棒,尤其是有很多模块(FindOOXX)。但是,当涉及到编写FindXXX
模块时,您的项目所依赖的库 XXX,对于非 cmake 专家来说并不是那么容易处理。我有时会遇到一个不支持 CMake 的库,我喜欢为它制作一个。我想知道在编写/测试 cmake 模块时是否有任何交互式 shell?
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_module
fromFindPkgConfig.cmake
后跟一个find_package_handle_standard_args
调用(用于include(FindPackageHandleStandardArgs)
获取它)。FPHSA 使编写正确的 Find 模块变得轻而易举。
对于XXX-config.cmake
文件,我通常使用configure_file
生成两个版本:一个用于安装(包括您的install(EXPORT)
文件),另一个用于构建树(由export()
调用生成)。使用它,可以准确设置其他有用的变量,例如“使用了哪个确切版本的 Boost”或“是否编译了 Python 支持”,以便依赖项目可以更好地了解依赖项的外观。
我最近还发现 CMake 附带了CMakePackageConfigHelpers
应该有助于制作这些文件的模块。看起来有相当多的文档。