2012-05-07 71 views
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文件在我的機器上運行。CMake使用(預先包裝的標題和dll)創建一個exe和lib

當前限制:
當我將exe傳遞給我的朋友時,他無法在他的機器上運行它,因爲他被大量缺少的dll命中。 當我使用lib文件時,要在VS C++中創建一個新項目,在找不到頭文件時有一個致命錯誤。
我知道,我可以手動添加所有dll,或者爲lib打包所有頭文件和庫文件。但它肯定是累贅和醜陋的。

問:
是否CMake的提供了一種方法,讓編譯成

  1. 一個EXE文件時(它會自動找到所有必需的dll文件到bin目錄下)
  2. 進入一個lib(它會自動源出所有的頭文件,也爲部分連接到lib目錄中neccesary庫)
+0

不是我所知道的。打包應用程序的部署一直是一項艱鉅的任務。 – karlphillip

回答

0

準備你的包上部署的超視距呃開發環境仍然是一項艱鉅的任務。你會正確地需要設置自己的接口/ API和需要處理跨DLL問題,不同的運行時間等

不過,也有從CMake的在您的處置幾個工具:

  • 查看InstallExport。您可以使用它來指定(在您的CMakeLists.txt中)部署所需的文件。這樣,您可以標記哪些頭文件,還有哪些目標(lib和exes)應該部署。

  • 還可以看看CPack與NSIS結合使用,它可以用來構建項目的NSIS安裝程序。

  • InstallRequiredSystemLibrariesBundleUtilities一起,您可以準備installpackage目標。另請參閱thisthis問題,演示如何將第三方dll添加到此類部署軟件包。

  • InstallRequiredSystemLibraries是附加vcredist到自己的軟件包安裝,你一定會需要,如果你是在一個非開發PC上安裝你的項目非常有用。