如何在cmake安装中包含库

如何在cmake安装中包含库,cmake,cpack,Cmake,Cpack,我一直在为我认为应该是一项相对容易的任务而奋斗。我在windows、Linux和OSX上构建,并试图在完成后将所有内容打包到存档中。我依赖于第三方库opencv,并将共享库打包到可执行文件中。当前的系统如下所示: foreach(lib ${OpenCV_LIBRARIES}) file(GLOB ${lib}_FILE_GLOB ${OpenCV_OUT_PATH}/*${lib}*) list(FILTER ${lib}_FILE_GLOB INCLUDE R

我一直在为我认为应该是一项相对容易的任务而奋斗。我在windows、Linux和OSX上构建,并试图在完成后将所有内容打包到存档中。我依赖于第三方库opencv,并将共享库打包到可执行文件中。当前的系统如下所示:

foreach(lib ${OpenCV_LIBRARIES})
        file(GLOB ${lib}_FILE_GLOB ${OpenCV_OUT_PATH}/*${lib}*)
        list(FILTER ${lib}_FILE_GLOB INCLUDE REGEX "\.so$|\.dll|\.dylib$")

        message(STATUS "${lib}_FILE_GLOB: ${OpenCV_OUT_PATH}/*${lib}* -> ${${lib}_FILE_GLOB}")
        install(FILES ${${lib}_FILE_GLOB} DESTINATION ${CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION})
endforeach()
其中
OpenCV\u OUT\u PATH
就是这段难看的代码

find_package(OpenCV 4.4 REQUIRED COMPONENTS core imgcodecs imgproc)
if(DEFINED OpenCV_LIB_PATH AND EXISTS "${OpenCV_LIB_PATH}/../bin")
    set(OpenCV_OUT_PATH ${OpenCV_LIB_PATH}/../bin/)
elseif(EXISTS "${OpenCV_INSTALL_PATH}/lib64")
    set(OpenCV_OUT_PATH ${OpenCV_INSTALL_PATH}/lib64)
elseif(EXISTS "${OpenCV_INSTALL_PATH}/lib")
    set(OpenCV_OUT_PATH ${OpenCV_INSTALL_PATH}/lib)
else()
    set(OpenCV_OUT_PATH ${OpenCV_INSTALL_PATH}/bin)
endif()
这一切都是可行的,我甚至可以在测试之后通过cmake运行应用程序。但我缺少的是正确的文件,而不是任何副本。在Linux上,out可执行文件链接到
libopencv\u imgcodecs.so.4
,但带有过滤器的是只安装
libopencv\u imgcodecs.so
,不带过滤器的它复制
libopencv\u imgcodecs.so
libopencv\u imgcodecs.so.4.4
,以及
libopencv\u imgcodecs.so.4.4.0
,这会使存档膨胀

我觉得有一种比硬编码过滤器更简单的方法,但我没有遇到任何更通用的方法。我确实尝试安装opencv目标和单个组件目标,但它们需要从Config.cmake文件导出,因此无法导入它们。我得到的最接近的路径是
OpenCV\u INSTALL\u PATH
,遗憾的是,它在windows上似乎不可用


我错过什么了吗?有人能推荐一种改进的方法吗?

一般来说,这种方法是错误的:您试图安装的smth不属于您的项目(和源代码树),完全不受您的控制。