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 (必要なすべての dll を bin ディレクトリに自動的に見つけます)
  2. libに(すべてのヘッダーファイルと、リンク部分に必要なライブラリをlibディレクトリに自動的にソースします)
4

1 に答える 1

0

他の開発環境への展開のためにパッケージを準備することは、依然として困難な作業です。独自のインターフェイス/API を正しくセットアップする必要があり、DLL 間の問題や異なるランタイムなどに対処する必要があります。

ただし、自由に使用できる CMake のツールがいくつかあります。

  • インストールエクスポートを確認してください。これを使用して、デプロイに必要なファイルを (CMakeLists.txt で) 指定できます。このようにして、どのヘッダー ファイルだけでなく、どのターゲット (libs と exe) をデプロイする必要があるかをマークできます。

  • また、プロジェクトの NSIS インストーラーをビルドするために使用できる NSIS と組み合わせた CPack も見てください。

  • InstallRequiredSystemLibrariesおよびBundleUtilitiesと共に、installまたはpackageターゲットを準備できます。このような展開パッケージにサードパーティの dll を追加する方法を示すthisおよびthis questionも参照してください。

  • InstallRequiredSystemLibrariesは、独自のパッケージ インストーラーに vcredist を追加するのに非常に便利です。これは、プロジェクトを非開発用 PC にインストールする場合に必ず必要になります。

于 2012-05-07T19:13:43.240 に答える