2012-12-30 64 views
2

This question詢問有關類似的問題,但只需要手動指定要複製的dll。我的問題是:是否有一種方法可以讓CMake複製鏈接到可執行庫的所有dll,而無需手動告訴CMake要複製哪些文件?有時候CMake更瞭解dll是否需要。例如,在安裝了相同庫(例如Boost)的dll和靜態庫的系統中,我們選擇靜態鏈接到Boost,那麼我們不需要複製dll。所以CMake可以做出比手動指定要複製的文件更好的決定。另一個例子是,我的QT庫鏈接到ICU庫,並且在編寫CMakeLists.txt時,我不知道這一點,所以我不能告訴CMake複製ICU dll,所以這應該由CMake完成,而不是人類。複製可執行文件鏈接到可執行文件目錄的所有dll

假設操作系統是Windows。

+0

我看到一個很大的問題:你可以不知道在編譯時所有必需的dll。延遲加載的dll或插件(使用自己的依賴dll)在運行時「發現」... –

回答

2

看一看的CMake的BundleUtilities.cmake提供fixup_bundle(...)

詳細信息可以在這裏找到:

http://www.cmake.org/Wiki/BundleUtilitiesExample

http://www.cmake.org/cmake/help/v2.8.8/cmake.html#module:BundleUtilities

+0

它僅適用於MacOSX。看起來不像Windows的工作,或者我錯過了一些東西。我查看了BundleUtilties的源代碼,並檢查了.app目錄的存在。 –

+0

我不得不承認我還沒有使用它,因爲我們有一個自定義實現在CMake中可用於非Mac平臺之前運行。我猜測代碼顯示了一些「歷史」變量/函數名稱。該代碼包含Windows和Linux的案例處理。例如:'fixup_bundle'調用看起來像Mac OS的'get_dotapp_dir',但是在那裏有一個'IF',它通過檢查'.app'目錄在Mac和非Mac處理之間分離*。 –

+0

BundleUtilities應該可以用於windows,儘管我使用的窗口我沒有測試過。我更喜歡在cmake中擁有自己的腳本來生成需要複製的dll列表,並從該列表中生成一個複製所需dll的批處理文件。 – drescherjm

相關問題