其实我是想单独使用 VC 的编译器进行编译,并在程序中完成对 cl.exe 的调用。其中一步就是在程序中用 system() 调用一个 bat 文件来设置临时环境变量,下面是这个 bat 文件的内容:
set path=%path%;%~dp0\vc14\bin\x86
set lo=%~dp0
set Lib=%lo%\winsdk\Lib\um\x86;%lo%\winsdk\Lib\um\x86;%lo%\vc14\lib\x86;%lo%\winsdk\Lib\ucrt\x86
set Include=%lo%\vc14\include;%lo%\winsdk\Include\um;%lo%\winsdk\Include\ucrt;%lo%\winsdk\Include\shared
cls
如果手动打开一个 cmd 窗口,调用这个 bat 文件,然后就可以输入命令,打开 cl.exe。
但如果在程序中使用 system() 调用完这个 bat 文件,再用 system() 启动 cl.exe,会显示找不到文件。
我猜测是因为每次调用 system() 都相当于单独启动了一次 cmd 并执行指定命令,所以在程序中执行的 bat 命令对后面执行的命令并无影响。
所以我得到了一种解决方案:直接在这个 bat 的末尾加上一行命令来启动我的程序,这样设置完环境变量之后,程序中就能成功使用设置好的环境变量了。
我的问题是:如果不采取这种在 bat 中启动程序的方式,还有什么办法可以在程序中调用 bat,并使得 bat 中设置的环境变量保持生效呢?(我目前知道可以将其设置为系统环境变量,但我并不想这么做。)