Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling batch files with make and making changes persistent

I'm programming with Visual C++ Express on the command line using makefiles (GNU Make). For this to work, I have to call the Visual Studio batch file vsvars32.bat to set up the environment. This has to be done everytime I open a new cmd.exe, before using make. When I try to call the batch file from my makefile, it obviously executes the batch file as an own process, because the environment is the same afterwards.

So my question: is there a way to execute scripts in cmd.exe like the built-in source command of the Linux/Unix bash? Apart from installing bash on Windows, of course.

Edit after posting my own answer:

The above question is not quite right, it should be like this:

Is it possible to call an environment-changing batch file from within a makefile, so that the changed environment persists for the other programs called in the makefile?

The answer to the original question is yes: you can use the built-in call command of cmd.exe. But since call is a built-in command and not a real program, it doesn't work in a makefile, only if you call a batch file from another batch file.

like image 825
Xenu Avatar asked Mar 08 '26 05:03

Xenu


1 Answers

Answer compiled from the previous answers:

I made a batch file called make.bat which contains the following:

call "%VS90COMNTOOLS%vsvars32.bat"
call make.exe %*

This does the job. But calling an environment-changing batch file from within a makefile, so that the changed environment persists for the other programs called in the makefile, seems to be impossible.

Edit: After overflowing my PATH variable by repeatedly calling vsvars32.bat, I made the following changes:

if not "%VISUALCVARS%" == "TRUE" (
set VISUALCVARS=TRUE
call "%VS90COMNTOOLS%vsvars32.bat"
)
call make.exe %*

like image 132
Xenu Avatar answered Mar 10 '26 19:03

Xenu



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!