2011-04-17 39 views
7

我正在爲我的項目CMake的腳本和我碰到一個問題:在cmake的使用外部DLL建立

我的項目使用的是第三方庫(FreeImage的),它有自己的Makefile-基於構建系統。我可以通過簡單的運行建立的FreeImage就好了「製造」(我用的GnuWin32),這將使用MinGW和產生的FreeImage建設:

FreeImage.lib 
FreeImage.dll 

現在我的問題是雙重的:

  1. 我想從我的cmake腳本執行「make」。
  2. 我想鏈接到導入庫(FreeImage.lib),並確保將DLL複製到正確的位置,以便EXE運行。

我知道如何鏈接到LIB文件,但我失去了其餘的。

的文件夾結構是這樣的:

MyProject      # main directory 
MyProject/Libs/FreeImage  # FreeImage root directory 
MyProject/Libs/FreeImage/Dist # This is where FreeImage outputs go (LIB and DLL) 

BTW:我在Windows 7上運行我計劃建立我都與MSVC和MinGW項目。

謝謝!

編輯: 現在我試圖用ExternalProject_Add像這樣:

ExternalProject_Add(
    FreeImage 
    PREFIX ./Libs/FreeImage 
    URL ./Libs/FreeImage 
    BUILD_COMMAND make 
) 

這讓我的存在方式的一部分,但不能完全工作...它試圖爲我配置的東西並試圖使用NMAKE ...啊

回答

2

在我看來,有兩種選擇:

如果你已經把你的FreeImage來源在你的項目的源代碼樹,最簡單的辦法可能是使用execute_process()命令。假設FreeImage是在你的項目的源代碼樹‘的3rdParty/FreeImage的/’到你自己的bin目錄下,你可以這樣做,

execute_process(COMMAND make WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/3rdParty/FreeImage) 

或者,也可以將DLL從的3rdParty/FreeImage的/ bin中複製。然後,你可以寫一個FreeImageConfig.cmake導入庫:

add_library(FreeImage的原裝進口) set_target_properties(FreeImage的性能IMPORTED_LOCATION $ {} PROJECT_SOURCE_DIR /的3rdParty/FreeImage的/ lib目錄) ...

其他選項是利用ExternalProject模塊。您還可以查看來自Kitware的this article,瞭解此模塊的概述。實質上,您需要指定獲取源代碼所需的完整鏈路,配置構建,構建源代碼並進行安裝。全部在你自己的CMakeLists.txt

+0

嗨,感謝您的信息。我想我想使用ExternalProject模塊,但是......呃......非常複雜。我開始時遇到了困難:-( – sidewinderguy 2011-04-27 19:34:06

+0

)我決定推出我自己的構建系統,我認爲這實際上比嘗試迫使CMake做一些非常尷尬的事情要容易一些,謝謝你的幫助。:-) – sidewinderguy 2011-05-05 18:48:51