150 lines
5.8 KiB
CMake
150 lines
5.8 KiB
CMake
# 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( <targetName>
|
|
## [COMMAND <myCustomAppToLaunch> | [ PATH <myCustomDirWhereIsDefaultTargetFileNameToLaunch> [FILE <myCustomExecFileToLaunch>] ] ]
|
|
## ARGS <associatedArguments>
|
|
## WORKING_DIR <whereStartTheProgram>
|
|
## )
|
|
##
|
|
## 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"
|
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?>
|
|
<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">
|
|
<PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|${PLATEFORM_BITS}'\">
|
|
<LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>
|
|
<LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>
|
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
|
<LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>
|
|
</PropertyGroup>
|
|
<PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|${PLATEFORM_BITS}'\">
|
|
<LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>
|
|
<LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>
|
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
|
<LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>
|
|
</PropertyGroup>
|
|
<PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='MinSizeRel|${PLATEFORM_BITS}'\">
|
|
<LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>
|
|
<LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>
|
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
|
<LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>
|
|
</PropertyGroup>
|
|
<PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='RelWithDebInfo|${PLATEFORM_BITS}'\">
|
|
<LocalDebuggerCommand>${MSVCsuc_COMMAND}</LocalDebuggerCommand>
|
|
<LocalDebuggerCommandArguments>${MSVCsuc_ARGS}</LocalDebuggerCommandArguments>
|
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
|
<LocalDebuggerWorkingDirectory>${MSVCsuc_WORKING_DIR}</LocalDebuggerWorkingDirectory>
|
|
</PropertyGroup>
|
|
</Project>"
|
|
)
|
|
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()
|