# Copyright (C) 2020, Inria # GRAPHDECO research group, https://team.inria.fr/graphdeco # All rights reserved. # # This software is free for non-commercial, research and evaluation use # under the terms of the LICENSE.md file. # # For inquiries contact sibr@inria.fr and/or George.Drettakis@inria.fr if(__MSVCsetUserCommand_cmake_INCLUDED__) return() else() set(__MSVCsetUserCommand_cmake_INCLUDED__ ON) endif() ## Allow to configure the Debugger settings of visual studio ## Note: Using this command under linux doesn't affect anything ## On run Debug Windows local : visual will try to load a specific COMMAND with ARGS in the provided WORKING_DIR ## ## usage: ## MSVCsetUserCommand( ## [COMMAND | [ PATH [FILE ] ] ] ## ARGS ## WORKING_DIR ## ) ## ## Warning 1 : All arugments () must be passed under quotes ## Warning 2 : WORKING_DIR path arg have to finish with remain slah '/' ## Warning 3 : use COMMAND for external app OR PATH (optionaly with FILE) option(s) to set your built/installed/moved target ## ## Example 1: ## include(MSVCsetUserCommand) ## MSVCsetUserCommand( UnityRenderingPlugin ## COMMAND "C:/Program Files (x86)/Unity/Editor/Unity.exe" ## ARGS "-force-opengl -projectPath \"${CMAKE_HOME_DIRECTORY}/UnityPlugins/RenderingPluginExample/UnityProject\"" ## WORKING_DIR "${CMAKE_HOME_DIRECTORY}/UnityPlugins/RenderingPluginExample/UnityProject" ## VERBOSE ## ) ## ## Example 2: ## include(MSVCsetUserCommand) ## MSVCsetUserCommand( ibrApp ## PATH "C:/Program Files (x86)/workspace/IBR/install" ## FILE "ibrApp${CMAKE_EXECUTABLE_SUFFIX}" ## this option line is optional since the target name didn't change between build and install step ## ARGS "-path \"${CMAKE_HOME_DIRECTORY}/dataset\"" ## WORKING_DIR "${CMAKE_HOME_DIRECTORY}" ## VERBOSE ## ) ## function(MSVCsetUserCommand targetName) cmake_parse_arguments(MSVCsuc "VERBOSE" "PATH;FILE;COMMAND;ARGS;WORKING_DIR" "" ${ARGN} ) ## If no arguments are given, do not create an unecessary .vcxproj.user file set(MSVCsuc_DEFAULT OFF) if(MSVCsuc_PATH AND MSVCsuc_DEFAULT) set(MSVCsuc_DEFAULT OFF) endif() if(MSVCsuc_FILE AND MSVCsuc_DEFAULT) set(MSVCsuc_DEFAULT OFF) endif() if(NOT MSVCsuc_COMMAND) if(MSVCsuc_PATH AND MSVCsuc_FILE) set(MSVCsuc_COMMAND "${MSVCsuc_PATH}\\${MSVCsuc_FILE}") elseif(MSVCsuc_PATH) set(MSVCsuc_COMMAND "${MSVCsuc_PATH}\\$(TargetFileName)") else() set(MSVCsuc_COMMAND "$(TargetPath)") ## => $(TargetDir)\$(TargetName)$(TargetExt) endif() elseif(MSVCsuc_DEFAULT) set(MSVCsuc_DEFAULT OFF) endif() # NOTE: there was a typo here. there is an else if written after else statement # changing the order of the else if statement if(MSVCsuc_WORKING_DIR) file(TO_NATIVE_PATH ${MSVCsuc_WORKING_DIR} MSVCsuc_WORKING_DIR) elseif(MSVCsuc_DEFAULT) set(MSVCsuc_DEFAULT OFF) else() set(MSVCsuc_WORKING_DIR "$(ProjectDir)") endif() if(NOT MSVCsuc_ARGS) set(MSVCsuc_ARGS "") elseif(MSVCsuc_DEFAULT) set(MSVCsuc_DEFAULT OFF) endif() if(MSVC10 OR (MSVC AND MSVC_VERSION GREATER 1600)) # 2010 or newer if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(PLATEFORM_BITS x64) else() set(PLATEFORM_BITS Win32) endif() if(NOT MSVCsuc_DEFAULT AND PLATEFORM_BITS) file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${targetName}.vcxproj.user" " ${MSVCsuc_COMMAND} ${MSVCsuc_ARGS} WindowsLocalDebugger ${MSVCsuc_WORKING_DIR} ${MSVCsuc_COMMAND} ${MSVCsuc_ARGS} WindowsLocalDebugger ${MSVCsuc_WORKING_DIR} ${MSVCsuc_COMMAND} ${MSVCsuc_ARGS} WindowsLocalDebugger ${MSVCsuc_WORKING_DIR} ${MSVCsuc_COMMAND} ${MSVCsuc_ARGS} WindowsLocalDebugger ${MSVCsuc_WORKING_DIR} " ) if(MSVCsuc_VERBOSE) message(STATUS "[MSVCsetUserCommand] Write ${CMAKE_CURRENT_BINARY_DIR}/${targetName}.vcxproj.user file") message(STATUS " to execute ${MSVCsuc_COMMAND} ${MSVCsuc_ARGS}") message(STATUS " from derectory ${MSVCsuc_WORKING_DIR}") message(STATUS " on visual studio run debugger button") endif() else() message(WARNING "PLATEFORM_BITS is undefined...") endif() else() if(MSVCsuc_VERBOSE) message(WARNING "MSVCsetUserCommand is disable because too old MSVC is used (need MSVC10 2010 or newer)") endif() endif() endfunction()