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