MinGW make: copy: command not found - makefile

I'm trying to compile hp2xx on Windows 10 using MinGW. My makefile is a straight copy of the dosdjgpp.mak file from the makes directory. I have c:\MinGW\bin and C:\MinGW\msys\1.0\bin in the path.
The make operation fails at the first copy. The makefile line it is failing on is
pbuf.o: picbuf.o
copy picbuf.o pbuf.o
and the error is
copy picbuf.o pbuf.o
make: copy: Command not found
make: *** [pbuf.o] Error 127
From the same command prompt I can use copy OK, so why can't make find it?

I believe that mingw/bin contains the linux style copy command cp so try
pbuf.o: picbuf.o
cp picbuf.o pbuf.o
You may want to add the windows copy path if not already included

Related

How does make command doesnot search for Makefile in the same directory first?

I am using the command make for compiling source codes. However, the command always issue this error
Makefile:10: Makefile_compiler_HOSTNAME: No such file or directory
make: *** No rule to make target `Makefile_compiler_HOSTNAME'. Stop.
where HOSTNAME is the hostname of my computer. It seems like make is defaulted to search for the file Makefile_compiler_HOSTNAME before the file Makefile.
Is there any way to set the default behaviour of make back?

Doxygen make pdflatex fail on Debian VM

I installed Doxygen on a Debian VM on Virtualbox, hosted by a Windows 10 pc. It runs smoothly as creates all the basic documentations, but when I enter into a latex documentation directory and try to run make it gives me the following bash report (roughly translated from italian):
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf
pdflatex refman
make: pdflatex: command not found
Makefile:8: instruction set for target "refman.pdf" failed
make: *** [refman.pdf] Error 127
I searched for this error but I couldn't find anything about. Both the doxyfile and the latex makefile aren't modifed.
Results form generating with doxygen generated Makefile indicates that the pdflatex cannot be found.
Problem appears to be that the installation of TexLive didn't add the directory with e.g. pdflatex to the path.

make: *** No rule to make target 'all'. Stop

I'm working a class assignment from machine learning course. We are given a hmm.tar file which contains c++ implementation of hidden markov models.
In the read me file the following was given.
To compile and test the program,
1) extract the code:
tar -xf hmm.tar
2) compile the programs:
make all
at the second step the output from the terminal is make: *** No rule to make target 'all'. Stop
I'm using windows10 OS and running cygwin terminal.
Please help me to sort this problem out. Here's the
Makefile
I'm guessing the tar file has files inside a subdirectory. You probably just need to make sure you're in the directory that has the Makefile, and then run make:
tar -xf hmm.tar
cd __somewhere_
make all
to help you know where the Makefile is, you could use:
tar tf hmm.tar | grep -i makefile
Since cygwin returns make: *** No rule to make target 'all'. Stop, it seems that make is installed correctly.
As such, it has to be two other things:
Either the make file inside the.tar is missing, or
there are syntactical errors present in the make file

Makefile error make (e=2): The system cannot find the file specified

I am using a makefile in windows to push some files on a Unix server (here a text file "blob.txt" in the same folder of my makefile).
My makefile script is:
setup:
pscp blob.txt username#hostname:/folder/
I start a command prompt, go in the folder where blob.txt and the makefile are present and type:
make setup
Which results in:
pscp blob.txt username#hostname:/folder/
process_begin: CreateProcess(NULL, pscp blob.txt username#hostname:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [setup] Error 2
In a #fail ... whereas if I enter directly the command in the command prompt:
pscp blob.txt username#hostname:/folder/
It works ... I really wonder why.
The error
process_begin: CreateProcess(NULL, pscp blob.txt username#hostname:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.
is almost certainly complaining that Windows cannot find pscp.
This is almost certainly because the value of %PATH% (or whatever) is different when make spawns a shell/console then when you have it open manually.
Compare the values to confirm that. Then either use the full path to pscp in the makefile recipe or ensure that the value of PATH is set correctly for make's usage.
I didn't want to remove GIT's bin folder from the PATH variable (I am using a Windows machine), as I use it quite often. So I looked for a workaround, and here it is:
Add the <git-installation-directory>/usr/bin directory to your PATH variable too. This basically adds the rest of the linux-like commands that come with the "GIT bash" to your environment. After applying this, my makefiles ran normally again. :)
If you are curious about what shell is being invoked by make, just add $(info $(SHELL)) at the beginning of your makefile. The path/name of the shell being invoked is printed to the console as soon as you run make.
I know this is an old question that has been answered, but thought I'd and my experiences for anyone still running into this. I was getting the same cryptic error Colonel Beauvel (though with the windows MOVE command, not pscp):
process_begin: CreateProcess(NULL, move /y foo\bar.c .\baz.c, ...) failed.
make (e=2): The system cannot find the file specified.
Our CI was running the same Makefile and working perfectly. Turns out CI was using mingw32-make and I was using GNU make. Uninstalling GNU make (which got installed as part of an unrelated bulk package) and aliasing mingw32-make to 'make' works perfectly.
#user3869623's solution works for me. I'd like to share some details of mine to complete the picture.
My makefile contains below target:
clean:
#echo '$(OS)'
ifeq ($(OS),Windows_NT)
del /s *.o *.d *.elf *.map *.log
endif
When I run make clean, I see this error:
Since it says something went wrong with echo, so I change my makefile target to below:
clean:
ifeq ($(OS),Windows_NT)
del /s *.o *.d *.elf *.map *.log
endif
This time, make clean gives me this error:
I am surprised to see bash here since I am working in Windows command line.
Then I checked my %PATH%, I see this entry:
C:\DevTools\Git\bin
There's a bash.exe and sh.exe in that path. So I removed this entry, and it works fine now.
BUT I STILL DON'T KNOW WHY BASH GET INTO THIS???
ADD 1
As to why the C:\DevTools\Git\bin shows up in my %PATH%, because I am using Sublime and it always asks me for the Git binaries:
In my case, I had git\bin in my %PATH% which contains bash.exe and sh.exe.
Removing %GIT_HOME%\bin from the PATH worked for me.
To build on user3869623's response.
In my case i had git\bin in my %PATH% which contains bash.exe and sh.exe.. Removing %GIT_HOME%\bin from the PATH worked for me
While this recommendation may allow make to run, it will likely cause issues for git, especially if the makefile is installing software from a git repository.
A better solution is to simply change %GIT_HOME%\bin to %GIT_HOME%\cmd
For those who tried removing the git bin folder from PATH and it didn't work for them, search your PATH variables for any paths containing bash.exe.
In my case I found a variable linking to cygwin bin folder C:\cygwin64\bin, removed it and it worked.
I had the same issue, and this thread really helped me solve it. In my case, it was a conflict between make and the sh.exe that was visible through my path, due to both git and mingw64. To fix my issue, without breaking Git, I added these lines to the top of my batch file that calls make:
set path=%path:git\bin=;%
set path=%path:mingw64\bin=;%
set path=%path:usr\bin=;%
This hides the extra sh.exe instances from make for that instance only.
I ran into this problem recently and this question was one of the top hits for my searches.
None of the other answers here helped me. The fix, for me, was to put the binary name in quotes:
setup:
"pscp" blob.txt username#hostname:/folder/
-"pscp" blob.txt username#hostname:/folder/ # Failure is OK, `-` in front
I'm on windows.
By explicitly setting my compiler to gcc (instead of cl?) it solved my problem.
CC = gcc
I hope some people more knowledgeable than me could explain why changing the compiler would impact the makefile parsing.

Build gcc on linux script

Good day, i write script for building gcc on linux, my code is:
#!/bin/bash
export INSTALLATION_GCC=/opt
cd $INSTALLATION_GCC
tar xjvf gcc-4.7.0.tar.bz2
export srcdir="$INSTALLATION_GCC/gcc-4.7.0"
export objdir="$INSTALLATION_GCC/gcc-bin"
export insdir="$INSTALLATION_GCC/usr/local"
mkdir -p $srcdir
mkdir -p $objdir
mkdir -p $insdir
cd $objdir
$srcdir/configure --prefix=$insdir
make bootstrap
make install
but when i run this script i get errors:
No such file or directoryopt
tar (child): gcc-4.7.0.tar.bz2\r: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
/configure: No such file or directory
'. Stop. No rule to make target `bootstrap
'. Stop. No rule to make target `install
Why cd not work successful, if i execute my script (if i input this command in interactive mode all ok)?After building and installing gcc why my version of gcc not changing, how can i replace old version gcc properly?
I think my comment about a backspace being part of the directory name is relevant:
"There is something strange here, the error message No such file or directoryopt is missing a space and a /. It looks to me like your code did not generate this error message, are you sure that $INSTALLATION_GCC is /opt with the leading /? It almost appears that the first character of $INSTALLATION_GCC is a backspace."
I also spied gcc-4.7.0.tar.bz2\r in one of the error messages. A \r would give these effects. The most common unwanted source of \r (carriage-return) is Windows. Are you using something like Notepad on Windows to edit your scripts? If Windows is involved, convert your script using dos2unix.

Resources