Help running a Makefile from within a .sh script?


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Help running a Makefile from within a .sh script?
# 8  
Old 10-16-2017
It means there are no TABs

After:
Code:
c   l   e   a   n   :  \n

Should be:
Code:
\t

But there are, instead only spaces.

I don't think your all: rule is working either, but it's that long since I've written a makefile, have forgotten more than I know Smilie It doesn't help that your script is obfuscating the actual make error with its own. If you run just the function on its own, you would see the actual make error.
# 9  
Old 10-16-2017
Okay, so after playing around with it I have changed the way the Makefile is created to:
Code:
populateMFiles () {
echo '
clean:    
    rm -rf cfile.out
build:    
    gcc -g -Wall -pedantic -Wextra cfile.c -w -o cfile.out
all:    cfile.c
    clean build'
}

There are TABs after clean: build: and all: and there are TABS before rm, gcc and clean. I have also changed the compileRepository method to:
Code:
#Check repository for .c files
#Compile all .c files within the current directory
compileRepository () {
    tput cup $[$lineCount] 5 ; echo "============================================================"
    if [ -f $currentPath/*Makefile* ]; then # Detect makefiles in repository and allow user to use if desired
        tput cup $[1+$lineCount] 5 ; echo "Is there an existing make file within the repository" 
        tput cup $[2+$lineCount] 5 ; echo "you would like to use? (y/n) "
        read useMakefile
        if [[ $useMakefile == Y || $useMakefile == y ]]; then 
            cd $currentPath/
            make
            exit

So it will just attempt to make it - then exit. This leaves the output on the screen which was an error message until I removed the 'all' from the make command. Now it outputs:
Code:
rm -rf cfile.out

Which is the code in the clean function of the Makefile. Have I set up my Makefile incorrectly do you think?
# 10  
Old 10-16-2017
Arghh... really doesn't help that I had a file called makefile in my directory, which make was using instead of Makefile Smilie

Code:
populateMFiles() {
#echo '.PHONY: all clean build
echo 'clean:
        rm -rf cfile.c cfile.out
build:
        gcc -g -Wall -pedantic -Wextra cfile.c -w -o cfile.out
all: clean build'
}

This does work fine, as far as I can see, so it would help to see the actual make error, not the one your script is displaying.

Saying nothing as to the rest of your code because I haven't read it, it would be slightly cleaner using cat instead of echo to print the Makefile and C file.

e.g.
Code:
populateMFiles() {
cat << EOF
clean:
        rm -rf cfile.c cfile.out
build:
        gcc -g -Wall -pedantic -Wextra cfile.c -w -o cfile.out
all: clean build
EOF
}

Code:
$ functions
populateMFiles() {
cat << EOF
clean:
	rm -rf cfile.out
build:
	gcc -g -Wall -pedantic -Wextra cfile.c -w -o cfile.out
all: clean build
EOF
}

$ cat cfile.c
int main( void ) {
  printf( "%s", "Hello world!\n" );
  return 1;
}

$ populateMFiles > Makefile

$ cat Makefile
clean:
	rm -rf cfile.out
build:
	gcc -g -Wall -pedantic -Wextra cfile.c -w -o cfile.out
all: clean build

$ make all
rm -rf cfile.out
gcc -g -Wall -pedantic -Wextra cfile.c -w -o cfile.out

$ ls cfile.out
cfile.out

$ ./cfile.out
Hello world!

Your makefile may remove the cfile.c file, so you need to run "populateCFiles" every time before you run make (as clean is the first rule), make all or make clean.
This User Gave Thanks to Scott For This Post:
# 11  
Old 10-16-2017
After making the changes you suggested to my program the first error I recieved was:
Code:
Makefile:2: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.

This was because I copy and pasted directly from the forum.. after correcting it and re-running the program I then recieved:
Code:
rm -rf cfile.c cfile.out
gcc -g -Wall -pedantic -Wextra cfile.c -w -o cfile.out
gcc: error: cfile.c: No such file or directory
gcc: fatal error: no input files
compilation terminated.
Makefile:4: recipe for target 'build' failed
make: *** [build] Error 1

Originally I thought this meant I was in the wrong directory to call the makefile but clearly not if it can actually interpret the lines from the file. I realised I had been deleting the .c file before compiling it so there was nothing to compile. After changing the clean statement to:
Code:
rm -rf cfile.out

Running the make all command returned:
Code:
rm -rf cfile.out
gcc -g -Wall -pedantic -Wextra cfile.c -w -o cfile.out

With no errors! However there is no cfile.out in the directory or any compiled c file! What else am I missing?

---------- Post updated at 01:05 PM ---------- Previous update was at 01:03 PM ----------

UPDATE: It is in the directory I just couldn't see it. Thank you so much for your help! Problem solved!!!
# 12  
Old 10-16-2017
What if you run the gcc command directly (from the directory where the .c file is)?
Code:
gcc -g -Wall -pedantic -Wextra cfile.c -w -o cfile.out

Show your makefile:
Code:
cat Makefile

(and just to not make the same mistake I did, make sure there are no other makefiles there!)

UPDATE: OK, cool. You're welcome Smilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Problem running a makefile

I have written this makefile and am getting an error saying make nfd gfortran -O -Wall -fbacktrace -fno-align-commons -c -o fd.o fd.f fd.f:49: Error: Can't open included file 'fd.par' make: *** Error 1 The directory structure is as follows . ├── library │ ├── fd │ │ ├──... (3 Replies)
Discussion started by: kristinu
3 Replies

2. Shell Programming and Scripting

Need help with a script to make makefile

How do we create a shell script that creates a makefile? what if we want to use the #include header files too? (2 Replies)
Discussion started by: sslokhan
2 Replies

3. Shell Programming and Scripting

using a Shell Script in a Makefile

Hello, I have a Makefile that converts wrl (vrml) files to html files... how can I use a shell script in that makefile which works on all html files after converting? The Shell Script have to find and replace a String in every createt html file. sorry I'm a Newbie, so I hope someone can... (0 Replies)
Discussion started by: Dan_78
0 Replies

4. Homework & Coursework Questions

Help with Simple Multi-Level Makefile (Extremely New at Makefile)

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Basically, the prompt is make a makefile with various sub makefiles in their respective subdirectories. All code... (1 Reply)
Discussion started by: Tatl
1 Replies

5. UNIX for Advanced & Expert Users

Makefile problem - How to run module load in a Makefile

Hi, I'm trying to run the module load command in a Makefile and i'm getting the following error: make: module: command not found Why is this? Is there any way to run this command in a Makefile? NOTE: command - module load msjava/sunjdk/1.5.0 works fine outside of the Makefile (2 Replies)
Discussion started by: hernandinho
2 Replies

6. UNIX for Dummies Questions & Answers

error while running a makefile

any good website to know about makefiles (3 Replies)
Discussion started by: raviravula
3 Replies

7. Shell Programming and Scripting

Shell script makefile

Is there a way to write a makefile for all the source files in a directory with a shell script? (2 Replies)
Discussion started by: zzhan
2 Replies

8. Shell Programming and Scripting

shell script in makefile

Hi, Can we execute a shell script by makefile. I mean we will write a shell script in a make file and it will be executed when we compile the C++ program using make file. (2 Replies)
Discussion started by: surjyap
2 Replies

9. Shell Programming and Scripting

embeding shell script in makefile

Hi I am new to shell scripting and makefile. I want a command's output in makefile to process further, can anyone plz suggest me a way ? I want ls -d *.dsm output in a variable and want to process it in makefile itself. It's urgent Thanks In advance (0 Replies)
Discussion started by: madhu12345
0 Replies

10. Shell Programming and Scripting

makefile sh script

Hello World ! ! ! I need libraries to use grib files. I only know the C language at the moment and I am working at the University under Red Hat 9.0. I downloaded the g2clib library (the best that I found) but I did not success to run the makefile. Here is the original file. I modified some... (4 Replies)
Discussion started by: Akeson Chihiro
4 Replies
Login or Register to Ask a Question