1
    cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
    project(ImageProc)

    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

    find_package(PCL 1.2 REQUIRED)
    find_package(OpenCV REQUIRED)

    add_definitions( -fPIC -Wall -O3)
    include_directories(${PCL_INCLUDE_DIRS})
    #link_directories(${PCL_LIBRARY_DIRS}) Dont think neccesary..
    add_definitions(${PCL_DEFINITIONS})

    add_executable (ImageProc svm.cpp ImageProc.cpp testImageProc.cpp)
    target_link_libraries (ImageProc ${OpenCV_LIBS} ${PCL_LIBRARIES})
    add_library(ImageProcLib STATIC svm.cpp ImageProc.cpp)
    target_link_libraries (ImageProcLib ${OpenCV_LIBS} ${PCL_LIBRARIES})

目前,我运行它并使用 VS C++ 打开并生成一个 exe 和 lib。该exe在我的机器上运行。

当前限制:
当我将 exe 传递给我的朋友时,他无法在他的机器上运行它,因为他被缺少的 dll 主机击中。当我使用 lib 文件在 VS C++ 中创建一个新项目时,找不到头文件会出现致命错误。
我知道,我可以手动添加所有 dll 和/或打包 lib 的所有头文件和库文件。但它肯定也很麻烦和丑陋。

问题:
CMake 是否提供了一种方法,以便在编译成

  1. 一个exe(它会自动在bin目录中找到所有必要的dll)
  2. 进入一个库(它会自动将所有头文件以及链接部分的必要库导出到 lib 目录中)
4

1 回答 1

0

准备你的包以部署在其他开发环境中仍然是一项艰巨的任务。您需要正确设置自己的接口/API,并且需要处理跨 dll 问题、不同的运行时等。

但是,您可以使用 CMake 的一些工具:

  • 查看安装导出。您可以使用它来指定(在您的 CMakeLists.txt 中)部署所需的文件。这样,您可以标记哪些头文件,以及哪些目标(libs 和 exes)应该被部署。

  • 还可以结合 NSIS 查看 CPack,它可用于构建项目的 NSIS 安装程序。

  • InstallRequiredSystemLibrariesBundleUtilities一起,您可以准备一个installpackage目标。另请参阅thisthis question 演示如何将第三方 dll 添加到此类部署包中。

  • InstallRequiredSystemLibraries对于将 vcredist 附加到您自己的软件包安装程序非常有用,如果您在非开发 PC 上安装项目,您肯定会需要它。

于 2012-05-07T19:13:43.240 回答