在哪里安装FindLib.cmake

时间:2017-08-08 09:21:41

标签: cmake

我正在创建一个库(称为fmi2),我打算在我的本地机器上安装(通过包管理器),然后链接到一堆其他库。

我将提供一个Findfmi2.cmake文件,以便我可以从其他库中调用private function addActionees($actionees, $id, $status) { DB::beginTransaction(); try { DB::table('task_assignee_user')->where('task_id', $id)->delete(); foreach ($actionees as $act) { $actAdd = array( 'task_id' => $id, 'user_id' => $act->user_id, ); DB::table('task_assignee')->insert($actAdd); } DB::commit(); return True; } catch (Exception $ex) { DB::rollback(); return FALSE; } } ,但是这个文件应该按常规安装在哪里?

以下是我考虑的一些选择及其问题:

  • find_package(fmi2)
    • 优势:/usr/share/cmake-3.8/Modules/Findfmi2.cmake将正常工作
    • 缺点:仅适用于一个版本的cmake
  • find_package(fmi2)
    • 优势:适用于任何版本的cmake
    • 缺点:这不是默认文件夹。我们需要添加/usr/share/cmake/Modules/Findfmi2.cmake,这会导致任何可移植性。
  • set(CMAKE_MODULES_PATH /usr/share/cmake/Modules)
    • 优势:便携式,只需添加${CMAKE_CURRENT_SOURCE_DIR}/cmake/Findfmi2.cmake
    • 即可
    • 缺点:不是系统范围的。需要手动将此文件添加到使用它的每个库中。这复制了我框架中的文件。

1 个答案:

答案 0 :(得分:1)

您正在编写CMake中的内容。您不需要FindModule。这旨在找到外部非CMake输出。

This Stackoverflow post from ruslo应该可以帮助您了解find_package()模块模式和配置模式之间的区别。它还回答了有关FindModule路径的问题,即它们被复制到您的CMake项目中,而不是在系统范围内发现,除非它们是与“模块”目录中的CMake捆绑在一起的官方FindModule的一部分。

现代CMake文档现在最终包含了创建配置模式包的好例子:cmake-packages

如果你想要显式的完整示例,虽然使用稍微较旧的config.cmake文件语法,ruslo在Github上有更多。