首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用CMake创建exe和lib (预先打包的标头和dll)

使用CMake创建exe和lib (预先打包的标头和dll)
EN

Stack Overflow用户
提问于 2012-05-07 10:17:29
回答 1查看 859关注 0票数 1
代码语言:javascript
复制
    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++中创建一个新项目时,在找不到头文件时会出现致命的错误。

我知道,我可以手动添加所有的all,或者打包库的所有头文件和库文件。但它绝对是累赘和丑陋的。

问题:

CMake是否提供了一种方法,以便在编译为

  1. exe (它将自动在bin目录中找到所有必需的all )
  2. 到lib中(它将自动源出所有头文件以及链接到lib目录的链接部分的相关库)
EN

回答 1

Stack Overflow用户

发布于 2012-05-07 19:13:43

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

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

  • 看看安装导出。您可以使用它来指定(在您的CMakeLists.txt中)部署所必需的文件。这样,您可以标记哪些头文件,但也应该部署哪些目标(lib和exe)。
  • 还可以看看CPack与NSIS的结合,它可以用于构建您的项目的NSIS安装程序。
  • InstallRequiredSystemLibrariesBundleUtilities一起,您可以准备一个installpackage目标。还请参阅问题,演示如何将第三方dll添加到这样的部署包中。
  • InstallRequiredSystemLibraries对于将vcredist附加到您自己的包安装程序非常有用,如果您在非开发的pc上安装您的项目,您肯定需要它。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10480349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档