2015-11-02 87 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