@@ -29,6 +29,18 @@ These variables can be used to choose which "vcvars" batch script is looked up.
2929 the variable :variable:`Vcvars_MSVC_VERSION` is initialized based on the most
3030 recent version of Visual Studio installed on the system.
3131
32+ .. variable:: Vcvars_FIND_VCVARSALL
33+
34+ If set to TRUE, forces the module to look up ``vcvarsall.bat`` instead of
35+ an architecture-specific script such as ``vcvars64.bat``.
36+
37+ When enabled, the appropriate architecture argument (e.g., ``x64`` or ``x86``),
38+ determined from the value of :variable:`Vcvars_MSVC_ARCH`, is automatically passed
39+ to ``vcvarsall.bat`` via the generated wrapper script.
40+
41+ Default is FALSE.
42+
43+
3244This will define the following variables:
3345
3446.. variable:: Vcvars_BATCH_FILE
@@ -341,10 +353,14 @@ endfunction()
341353function (Vcvars_FindFirstValidMsvcVersion msvc_arch candidate_msvc_versions msvc_version_output_varname batch_file_output_varname)
342354 _vcvars_message(STATUS "Setting ${msvc_version_output_varname} " )
343355 # which vcvars script ?
344- if (msvc_arch STREQUAL "64" )
345- set (_candidate_scripts vcvarsamd64.bat vcvars64 .bat)
356+ if (Vcvars_FIND_VCVARSALL )
357+ set (_candidate_scripts vcvarsall .bat)
346358 else ()
347- set (_candidate_scripts vcvars32.bat)
359+ if (msvc_arch STREQUAL "64" )
360+ set (_candidate_scripts vcvarsamd64.bat vcvars64.bat)
361+ else ()
362+ set (_candidate_scripts vcvars32.bat)
363+ endif ()
348364 endif ()
349365 foreach (_candidate_msvc_version IN LISTS candidate_msvc_versions)
350366 Vcvars_GetVisualStudioPaths(${_candidate_msvc_version} "${msvc_arch} " _paths)
@@ -403,9 +419,15 @@ if(NOT DEFINED Vcvars_MSVC_VERSION)
403419 endif ()
404420 endif ()
405421endif ()
422+
423+ if (NOT DEFINED Vcvars_FIND_VCVARSALL)
424+ set (Vcvars_FIND_VCVARSALL FALSE )
425+ endif ()
426+
406427if (NOT DEFINED Vcvars_BATCH_FILE)
407428 set (Vcvars_BATCH_FILE "Vcvars_BATCH_FILE-NOTFOUND" )
408429endif ()
430+
409431if (NOT DEFINED Vcvars_LAUNCHER)
410432 set (Vcvars_LAUNCHER "Vcvars_LAUNCHER-NOTFOUND" )
411433endif ()
@@ -416,10 +438,14 @@ if(NOT Vcvars_MSVC_ARCH MATCHES ${_Vcvars_MSVC_ARCH_REGEX})
416438endif ()
417439
418440# which vcvars script ?
419- if (Vcvars_MSVC_ARCH STREQUAL "64" )
420- set (_Vcvars_SCRIPTS vcvarsamd64.bat vcvars64 .bat)
441+ if (Vcvars_FIND_VCVARSALL )
442+ set (_Vcvars_SCRIPTS vcvarsall .bat)
421443else ()
422- set (_Vcvars_SCRIPTS vcvars32.bat)
444+ if (Vcvars_MSVC_ARCH STREQUAL "64" )
445+ set (_Vcvars_SCRIPTS vcvarsamd64.bat vcvars64.bat)
446+ else ()
447+ set (_Vcvars_SCRIPTS vcvars32.bat)
448+ endif ()
423449endif ()
424450
425451# set Vcvars_BATCH_FILE
@@ -457,17 +483,26 @@ endif()
457483set (Vcvars_LAUNCHER)
458484if (Vcvars_BATCH_FILE)
459485
486+ set (_vcvarsall_arch )
487+ if (Vcvars_FIND_VCVARSALL)
488+ if (Vcvars_MSVC_ARCH STREQUAL "64" )
489+ set (_vcvarsall_arch "x64" )
490+ elseif (Vcvars_MSVC_ARCH STREQUAL "32" )
491+ set (_vcvarsall_arch "x86" )
492+ endif ()
493+ endif ()
460494 set (_in "${CMAKE_BINARY_DIR} /${CMAKE_FILES_DIRECTORY} /Vcvars_wrapper.bat.in" )
461495 get_filename_component (_basename ${Vcvars_BATCH_FILE} NAME_WE )
462496 set (_out "${CMAKE_BINARY_DIR} /${CMAKE_FILES_DIRECTORY} /${_basename} _wrapper.bat" )
463- file (WRITE ${_in} "call \" @Vcvars_BATCH_FILE@\"
497+ file (WRITE ${_in} "call \" @Vcvars_BATCH_FILE@\" @_vcvarsall_arch@
464498%*
465499" )
466500 configure_file (${_in} ${_out} @ONLY)
467501
468502 set (Vcvars_LAUNCHER ${_out} )
469503 unset (_in)
470504 unset (_out)
505+ unset (_vcvarsall_arch)
471506endif ()
472507
473508# cleanup
0 commit comments