2014-01-17 35 views
1

由於'Abc_Win.dll'被共享('dll')並需要複製到目標EXE,因此我添加了一個自定義目標- 喜歡這個。我正在使用MS-VisualStudio 2005-2011並使用cmake 2.8.8。

add_custom_target("Abc_Win.dll") 
add_custom_command(TARGET "Abc_Win.dll" POST_BUILD 
        COMMAND ${CMAKE_COMMAND} -E copy_if_different 
        "MyDllSource/${CMAKE_CFG_INTDIR}/Abc_Win.dll" 
        "MyExeDest/${MWEB_CMAKE_CFG_INTDIR}/Abc_Win.dll") 
set_property(Abc_Win.dll" PROPERTY FOLDER ${MWEB_FOLDER_ADDON}/${MWEB_FOLDER_RTE}) 

以上所有的工作就像我期望的和'Abc_Win.dll'在我建立時得到正確的地方。

現在我添加下面的安裝命令 - 期望在我的EXE旁邊的「Bin」目錄中的「Abc_Win.dll」。

install(FILES "MyDllSource/${CMAKE_CFG_INTDIR}/Abc_Win.dll" DESTINATION "Bin") 

當我建立現在CMakePredefinedTargets->安裝(不要緊我使用的MS-StudioVersion)我在cmake的生成文件「cmake_install.cmake」總是得到一個生成錯誤:

  • 文件安裝找不到
  • 「MyDllSource/$(配置) /Abc_Win.dll」

我明白,CMake的不使用來自MS-VS的構建規則 - 就像它爲add_custom_command一樣。它似乎也是這個cmake文件沒有內容$(CONFIGRATION)的內容,它被設置爲'Debug'。

有沒有人知道如何解決這個問題?幫助將非常感激。謝謝。

回答

1

您可以在此處使用一個未公開的變量:CMAKE_INSTALL_CONFIG_NAME

除非您碰巧已經在您的CMakeLists.txt中定義了它,否則當CMake運行時它將會是未定義的。但是,當您在CMakeLists.txt中使用install命令時,CMake會在構建樹的根目錄(與CMakeCache.txt相同的位置)中生成一個名爲「cmake_install.cmake」的文件。這是在安裝時執行的,並且它將CMAKE_INSTALL_CONFIG_NAME設置爲您在Visual Studio中的當前配置。

還有一個輕微的轉折;爲避免CMake在install命令中擴展${CMAKE_INSTALL_CONFIG_NAME}(它將擴展爲空字符串),您需要使用\將其轉義。

所以,你只需要改變你的install命令:

install(FILES "MyDllSource/\${CMAKE_INSTALL_CONFIG_NAME}/Abc_Win.dll" 
     DESTINATION "Bin") 
+0

非常感謝弗雷澤 - 只是因爲我新我不能增加答案一樣有用。它幫助了你,讓我非常開心;-)一個小小的評論:對於VS-Studio使用add_custom_command來查找我的庫,我仍然需要使用'MWEB_CMAKE_CFG_INTDIR'。 – user3208544

+0

@ user3208544很高興幫助:)而且,自定義命令中的'CMAKE_INSTALL_CONFIG_NAME'將爲空,因爲該命令是在構建時執行的,而不是安裝時間。 – Fraser

相關問題