0

我正在构建一个 Windows .bat 脚本来自动编译和安装 CERN 的 Geant4 工具包(但我的以下问题与我要处理的软件无关)。到目前为止我设法做的似乎工作正常,但我对在脚本末尾设置环境变量的方式不满意。

要完成安装,我必须设置环境变量以指示所需数据集的路径,以及 C++ 包含和库目录(我选择为这些文件修改“PATH”变量)。我想为当前脚本(使用set命令)和下一次执行(使用setx命令)设置它们

我现在使用的脚本如下:

REM to get the path to directory where this bat file is executed from.
set G4_bat_file_dir=%~dp0

REM set the environement variables for next cmd runs

REM adding to local (temporary) PATH
set G4dataset_RootDir="%G4_bat_file_dir%\install\share\Geant4-10.4.3\data\"

REM adding environment variables for current and next cmd executions
setx G4dataset_RootDir "%G4_bat_file_dir%\install\share\Geant4-10.4.3\data\"

setx G4ABLADATA %G4dataset_RootDir%\G4ABLA3.1
setx G4ENSDFSTATEDATA %G4dataset_RootDir%\G4ENSDFSTATE2.2
setx G4LEDATA %G4dataset_RootDir%\G4EMLOW7.3
setx G4LEVELGAMMADATA %G4dataset_RootDir%\PhotonEvaporation5.2
setx G4NEUTRONHPDATA %G4dataset_RootDir%\G4NDL4.5
setx G4NEUTRONXSDATA %G4dataset_RootDir%\G4NEUTRONXS1.4
setx G4PIIDATA %G4dataset_RootDir%\G4PII1.3
setx G4RADIOACTIVEDATA %G4dataset_RootDir%\RadioactiveDecay5.2
setx G4REALSURFACEDATA %G4dataset_RootDir%\RealSurface2.1.1
setx G4SAIDXSDATA %G4dataset_RootDir%\G4SAIDDATA1.1

set G4ABLADATA=%G4dataset_RootDir%\G4ABLA3.1
set G4ENSDFSTATEDATA=%G4dataset_RootDir%\G4ENSDFSTATE2.2
set G4LEDATA=%G4dataset_RootDir%\G4EMLOW7.3
set G4LEVELGAMMADATA=%G4dataset_RootDir%\PhotonEvaporation5.2
set G4NEUTRONHPDATA=%G4dataset_RootDir%\G4NDL4.5
set G4NEUTRONXSDATA=%G4dataset_RootDir%\G4NEUTRONXS1.4
set G4PIIDATA=%G4dataset_RootDir%\G4PII1.3
set G4RADIOACTIVEDATA=%G4dataset_RootDir%\RadioactiveDecay5.2
set G4REALSURFACEDATA=%G4dataset_RootDir%\RealSurface2.1.1
set G4SAIDXSDATA=%G4dataset_RootDir%\G4SAIDDATA1.1

setx Geant4_DIR %G4_bat_file_dir%\install\lib\Geant4-10.4.3\

REM adding to PATH the paths to libraries and includes for Qt4 and Geant4.

setx PATH "%G4_bat_file_dir%\install\lib;%G4_bat_file_dir%\install\bin;%G4_bat_file_dir%\xerces-c\instal\bin;%G4_bat_file_dir%\xerces-c\instal\lib;%G4_bat_file_dir%Qt4\install\bin;%G4_bat_file_dir%Qt4\install\lib;%PATH%"

路径%G4_bat_file_dir%\install\lib;%G4_bat_file_dir%\install\bin;%G4_bat_file_dir%\xerces-c\instal\bin;%G4_bat_file_dir%\xerces-c\instal\lib;%G4_bat_file_dir%Qt4\install\bin;%G4_bat_file_dir%Qt4\install\lib是我要附加的路径。

这是我在运行脚本 2 次后获得的环境变量设置的屏幕截图:

http://djienne.free.fr/env.png

这远非理想,有几件事我不满意:

  • 变量中的所有路径都被完全使用,然后 PATH 变量也变得太长,我收到错误“警告:正在保存的数据被截断为 1024 个字符”。

  • 如果我连续两次运行脚本,它会在 PATH 条目中产生重复项(并且超过 1024 个字符限制的所有内容都会被截断)

  • 此外,如果我将此代码放在我的主要编译/安装脚本的末尾,它会给出错误'setx' is not recognized as an internal or external command, operable program or batch file.,因此不会创建/修改环境变量。但是,如果我将此脚本作为单独的 .bat 文件运行,它就可以工作。所以有些东西我不明白。(我指定我总是“以管理员身份运行”来运行脚本。)

在此先感谢您的帮助。

4

1 回答 1

0

根据评论中的建议,我launch_visual_studio.bat在项目的顶层构建了一个批处理脚本,以使用更新的本地 PATH 启动 Visual Studio。该文件包含代码:

@echo off

REM Set the environment

set G4_bat_file_dir=%~dp0

set QTDIR=%G4_bat_file_dir%Qt5\qt-5.6.3\

set QMAKESPEC=win32-msvc2015

set Geant4_DIR=%G4_bat_file_dir%install\lib\Geant4-10.4.3\

REM split into two parts for readability
set PATH=%PATH%;%G4_bat_file_dir%install\bin;%G4_bat_file_dir%install\lib;%G4_bat_file_dir%install\include\Geant4
set PATH=%PATH%;%QTDIR%lib;%QTDIR%bin;%QTDIR%include

REM launch visual studio

"%vs140comntools%..\IDE\devenv.exe"

这适用于 Visual Studio 2015,但对于其他版本会有所不同。

PATH对于,QTDIR和以外的环境变量Geant4_DIR,因为它们具有非常具体的名称(G4ABLADATA, G4ENSDFSTATEDATA, ...),所以使用 永久设置它们似乎很好setx,如前所示。

于 2019-05-01T16:01:28.107 回答