如何使用 cmake 设置 OpenCV 以启用动态和静态构建?

How to set up OpenCV with cmake to enable dynamic and static builds?

我已经使用 SHARED_LIBS 在我的 mac 上构建并 make install 编辑了 opencv。 如果我使用或不使用共享库构建,我希望能够为每个项目选择。

当我使用 -DBUILD_SHARED_LIBS=OFF 编译额外的 OpenCV 构建时,如何在我的项目 CMakeLists 中引用它并选择我想要的构建类型?

我的 ~/opencv 中有共享库的源代码,我已经在 ~/opencv/build 中编译了它,然后是 make install

当我创建另一个像 ~/opencv/static_build 这样的目录时,我必须如何调整我的 CMakeLists 才能制作静态构建应用程序?到目前为止我用过:

    find_package( OpenCV REQUIRED )

    include_directories(${OpenCV_INCLUDE_DIRS})
    target_link_libraries(test ${OpenCV_LIBS})

但如果我没记错的话,这些行都依赖于在我最初 make install 期间添加到 cmake 的变量。

它的工作原理是为每个构建使用 cmake 标志 -D CMAKE_INSTALL_PREFIX 配置不同的安装位置,然后 make install 将它们安装到各自的位置。

为了区分特定构建并允许 cmake 找到不在其路径中的库,必须将以下行添加到项目的 CMakeLists.txt:

set(OpenCV_DIR /path/to/build/lib/cmake)

之前:

find_package( OpenCV REQUIRED )