Minuit2

Minuit2 在独立模式下可用,用于 ROOT 不可用或未启用 Minuit2 构建的情况。本节会介绍推荐的用法,以及讨论一下集成设计方面的事宜。

用法

无论是使用 ROOT 源码,还是使用单独发行的源码包,Minuit2 都可以使用 CMake 的标准用法:

  1. # Check for Minuit2 in ROOT if you want
  2. # and then link to ROOT::Minuit2 instead
  3. add_subdirectory(minuit2) # or root/math/minuit2
  4. # OR
  5. find_package(Minuit2 CONFIG) # Either build or install
  6. target_link_libraries(MyProgram PRIVATE Minuit2::Minuit2)

开发

Minuit2 是将现代 CMake(CMake 3.1+)构建,集成到现有框架的解决方案。同时,也是一个很好的例子。

要处理两个不同的 CMake 系统,主 CMakeLists.txt 定义一些公共选项,然后使用 Standalone.cmake (不作为 ROOT 的一部分构建的情况下)。

ROOT 案例中最困难的部分是,Minuit2 需要 math/minuit2 目录之外的文件。这个问题,通过使用copy_standalone.cmake 解决了。文件中使用一个函数,该函数接受一个文件名列表,然后返回原始源中的文件名列表;或者将文件复制到本地源中,并返回新位置的列表;亦或者,若原始源不存在(独立模式),则只返回新位置的列表。

  1. # Copies files into source directory
  2. cmake /root/math/minuit2 -Dminuit2-standalone=ON
  3. # Makes .tar.gz from source directory
  4. make package_source
  5. # Optional, clean the source directory
  6. make purge

但这仅适用于使用源码包的开发人员 —— 普通用户不会选择该选项,也不会创建源码的副本。

使用 ROOT 源码,还是使用单独发行的源码包,都可以使用make installmake package (生成二进制包),而无需添加 standalone 选项。