2015-11-02 84 views
1
add_custom_target(NSISTest_Preprocess SOURCES precompress.nsi) 
add_custom_command(TARGET NSISTest_Preprocess POST_BUILD 
    COMMAND "${NSIS_PATH}" "...\\precompress.nsi") 

安裝程序的輸出名稱在nsi腳本中定義。現在我想簡單地運行安裝程序。如何指定在Visual Studio 2010中使用'Debug-> Start Debugging'或'Debug-> Start Without Debuging'時會發生什麼?CMake add_custom_target():使用'Debug-> Start Debugging'運行自定義命令

我嘗試了CreateLaunchers.cmake腳本,該腳本生成.user文件,但我認爲它只適用於add_executable

我也試過目標房產ARCHIVE_OUTPUT_NAME,LIBRARY_OUTPUT_NAME,RUNTIME_OUTPUT_NAME,但沒有一個有效果。

+0

我認爲答案將b e對於自定義目標無關緊要,如果使用VS調試器執行它。你能解釋爲什麼你需要區分這兩種情況嗎?一般來說,Debug設置存儲在VS''.vcxproj.user'文件中,通常不會由CMake生成。 Jim Butler撰寫的這篇博文(通過http://cmake.limitpoint.com/setting-the-visual-studio-debugger-path-using-cmake/)介紹了使用CMake生成自己的調試器設置文件的過程。 – Florian

+0

@弗洛裏安不,我不需要區分。要麼會沒事的。我只想在VS中運行可執行文件。因爲我可以指定如何在CMake中構建它,所以我認爲指定如何運行它會很好。 –

+0

您可以運行安裝程序,例如'在VS中添加'add_custom_target(RunInstaller COMMAND ...)'。你只需要使用'Build'而不是'Debug'。添加'set_target_properties(RunInstaller PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)'以防止它被其他構建調用。我是否正確理解您沒有安裝程序的名稱/路徑,因爲它是在'.nsi'腳本中定義的?從腳本獲取名稱或腳本輸出也是可能的。你能否添加一個腳本內容/輸出的例子(我承認我沒有NSIS)? – Florian

回答

1

.user設置方法也適用於自定義目標。您可以只添加 - 如果路徑是已知的 - 安裝程序的.exe作爲調試器應該用'Debug-> Start Debugging'調用的命令。

VS2010Test-Debug.vcxproj.user.in

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> 
    <LocalDebuggerCommand>${_my_installer_path}</LocalDebuggerCommand> 
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> 
    </PropertyGroup> 
</Project> 

的CMakeLists.txt

... 
if (MSVC_VERSION GREATER 1599 AND 
    NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/NSISTest_Preprocess.vcxproj.user") 
    file(TO_NATIVE_PATH "[your installer's path goes here]" _my_installer_path) 
    configure_file(
     "VS2010Test-Debug.vcxproj.user.in" 
     "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/NSISTest_Preprocess.vcxproj.user" 
    ) 
    file(
     COPY "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/NSISTest_Preprocess.vcxproj.user" 
     DESTINATION "${CMAKE_CURRENT_BINARY_DIR}" 
     FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE 
    ) 
endif() 

背景

  • 我只拷貝/ configu重新當它不存在,因爲VS不處理之外更改.user文件很好
  • 我必須確保所有的文件訪問權限設置是否正確,因爲你的供應鏈管理可以設置只讀標誌(這是保持文件通過configure_file()

參考

+0

謝謝你的回答。我明天會測試它。 –

+0

@AndreasHaferburg Your're welcome。只是想檢查它是否工作並解決了你的問題?謝謝。 – Florian

+0

參考文獻中的鏈接似乎已中斷 – onqtam