First time programmer needs Help with Makefiles


 
Thread Tools Search this Thread
Top Forums Programming First time programmer needs Help with Makefiles
# 1  
Old 09-03-2015
First time programmer needs Help with Makefiles

I am trying to practice to create Makefiles. The goal is to create a makefile such that if a change is made to any of the source code files, the project can be rebuilt by typing make at the command line.

I have the following files:

Code:
ac.cc: has include ac.h and pg.h
fr.cc:  has main function and include pg.h
gq.cc:  has main function and include ac.h, bb.h
pg.cc:  has include pg.h
vw.cc:  has main function and include ac.h


This is the error I keep getting:

Code:
Makefile:32: warning: overriding recipe for target 'pg.o'
Makefile:8: warning: ignoring old recipe for target 'pg.o'
g++ -c ac.cc
g++ -c pg.cc
g++ -o acprog ac.o pg.o
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crt1.o: In function `_start':
/build/glibc-Ir_s5K/glibc-2.19/csu/../sysdeps/x86_64/start.S:118: undefined reference to `main'
collect2: error: ld returned 1 exit status
Makefile:2: recipe for target 'acprog' failed
make: *** [acprog] Error 1
z1755294@hopper:~/assign1/assign1$


This is my Makefile code:

Code:
acprog: ac.o pg.o
        g++ -o acprog ac.o pg.o

ac.o: ac.cc ac.h pg.h
        g++ -c ac.cc

pg.o: pg.cc ac.h pg.h
        g++ -c pg.cc

frprog: fr.o
        g++ -o frprog fr.o

fr.o: fr.cc pg.h
        g++ -c fr.cc

gqprog: gq.o
        g++ -o gqprog gq.o

gq.o: gq.cc ac.h bb.h
        g++ -c gq.cc

pgprog: pg.o
        g++ -o pgprog pg.o

pg.o: pg.cc pg.h
        g++ -c pg.cc

vwprog: vw.o
        g++ -o vwprog vw.o

vw.o: vw.cc ac.h
        g++ -c vw.cc

clean:
        -rm *.o


What exactly am I doing wrong and how can I fix this to make it work.


Thanks
Moderator's Comments:
Mod Comment Please use CODE or ICODE tags for all sample input, output, and code segments. And use CODE tags (not ICODE tags) for full line and multiline input, output, and code segments.

Last edited by Don Cragun; 09-03-2015 at 08:24 PM.. Reason: Fix CODE tags.
# 2  
Old 09-03-2015
Quote:
Originally Posted by pintu1228
I am trying to practice to create Makefiles. The goal is to create a makefile such that if a change is made to any of the source code files, the project can be rebuilt by typing make at the command line.

I have the following files:

Code:
ac.cc: has include ac.h and pg.h
fr.cc:  has main function and include pg.h
gq.cc:  has main function and include ac.h, bb.h
pg.cc:  has include pg.h
vw.cc:  has main function and include ac.h


This is the error I keep getting:

Code:
Makefile:32: warning: overriding recipe for target 'pg.o'
Makefile:8: warning: ignoring old recipe for target 'pg.o'
g++ -c ac.cc
g++ -c pg.cc
g++ -o acprog ac.o pg.o
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crt1.o: In function `_start':
/build/glibc-Ir_s5K/glibc-2.19/csu/../sysdeps/x86_64/start.S:118: undefined reference to `main'
collect2: error: ld returned 1 exit status
Makefile:2: recipe for target 'acprog' failed
make: *** [acprog] Error 1
z1755294@hopper:~/assign1/assign1$


This is my Makefile code:

Code:
acprog: ac.o pg.o
        g++ -o acprog ac.o pg.o

ac.o: ac.cc ac.h pg.h
        g++ -c ac.cc

pg.o: pg.cc ac.h pg.h
        g++ -c pg.cc

frprog: fr.o
        g++ -o frprog fr.o

fr.o: fr.cc pg.h
        g++ -c fr.cc

gqprog: gq.o
        g++ -o gqprog gq.o

gq.o: gq.cc ac.h bb.h
        g++ -c gq.cc

pgprog: pg.o
        g++ -o pgprog pg.o

pg.o: pg.cc pg.h
        g++ -c pg.cc

vwprog: vw.o
        g++ -o vwprog vw.o

vw.o: vw.cc ac.h
        g++ -c vw.cc

clean:
        -rm *.o


What exactly am I doing wrong and how can I fix this to make it work.


Thanks
Moderator's Comments:
Mod Comment Please use CODE or ICODE tags for all sample input, output, and code segments. And use CODE tags (not ICODE tags) for full line and multiline input, output, and code segments.
The warnings at the start of your output are there because you have two rules in your make file for building pg.o (both shown in red above). Since you said that pg.cc includes pg.h (but not ac.h), get rid of the first rule in your makefile for building pg.o that starts on line 8 in your makefile.

All runnable C++ programs must include one function named main() (which is the function that will be called when your program starts execution). Your build is failing because neither pg.cc nor ac.cc contain such a function.
# 3  
Old 09-04-2015
You might be interested in this little introduction on makefiles.

I hope this helps.

baunin
# 4  
Old 09-05-2015
Code:
ac.o: ac.cc ac.h pg.h
        g++ -c ac.cc

frprog: fr.o
        g++ -o frprog fr.o

fr.o: fr.cc pg.h
        g++ -c fr.cc



gqprog: gq.o
        g++ -o gqprog gq.o

gq.o: gq.cc ac.h bb.h
        g++ -c gq.cc -I/includes/bb.h



pg.o: pg.cc pg.h
        g++ -c pg.cc



vwprog: vw.o
        g++ -o vwprog vw.o

vw.o: vw.cc ac.h
        g++ -c vw.cc

clean:
        -rm *.o

Can't seem to create other source files in my program.

Last edited by Don Cragun; 09-05-2015 at 12:38 AM.. Reason: Fix CODE tags, again.
# 5  
Old 09-05-2015
Makefiles are usually used to create object files; not source files. And, I don't see any rules in your makefile that make any attempt to create a source file.

What source files are you trying to create with your makefile?

What command line did you use when you invoked make?

What output did you get when you ran make?

What files were you hoping your invocation of make would produce?

Did you make any changes to any of your source files from the way you described them in post #1 in this thread (such as adding a definition of the function main() in ac.cc or pg.cc)?
# 6  
Old 09-05-2015
Here is make file:

Code:
all: frprog gqprog vwprog

frprog: fr.o
        g++ -o frprog fr.o

fr.o: fr.cc pg.h
        g++ -c fr.cc

gqprog: gq.o
        g++ -o gqprog gq.o

gq.o: gq.cc ac.h bb.h
        g++ -c gq.cc -I/includes/bb.h

vwprog: vw.o
        g++ -o vwprog vw.o

vw.o: vw.cc ac.h
        g++ -c vw.cc

ac.o: ac.cc ac.h pg.h
        g++ -c ac.cc

pg.o: pg.cc pg.h
        g++ -c pg.cc


clean:
        -rm *.o

I have attached the source files we need to use to create a Makefile. The purpose is to create a makefile that if a change is made to any of the source files, the project can be rebuilt by typing make at the command line.

Any help would be appreciated to complete this. I have been struggling with this.

Last edited by Don Cragun; 09-05-2015 at 01:07 AM.. Reason: Fix CODE tags again.
# 7  
Old 09-05-2015
We are not allowed to modify any of the source files
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Makefiles

Hi All, I was going through some makefiles where I saw occurrences of explib_subdirs and expinc_subdirs, which I could not understand. Exporting libs to subdirs ? Exporting include files to specified subdirs ? When do we need to do that ? What I could understand is, for a build, I would... (4 Replies)
Discussion started by: alltaken
4 Replies

2. Shell Programming and Scripting

Building programs from separate makefiles

I have several makefiles to build various programs in a software suite (currently 4 programs). I want to create a main Makefile so that I can build everything I need. Unsure on the way I should proceed, for example using include fdtc.mk or calling $(MAKE) -f ./mk/Makefile nfdtc Here... (15 Replies)
Discussion started by: kristinu
15 Replies

3. Shell Programming and Scripting

Makefiles: Writing list to screen

I have a make file and want to write some information and am doing @echo " RAYPK_LIBSRC = $(RAYPK_LIBSRC)" The line of code produces RAYPK_LIBSRC = ./source/library/raypk/time.f ./source/library/raypk/model.f ./source/library/raypk/tomo.f ./source/library/raypk/plt.f... (1 Reply)
Discussion started by: kristinu
1 Replies

4. Programming

Makefiles for different programs

I have several programs in several directories and want to use make to build the executables. What I have done is to put the main programs in their own directory together with a makefile to build the program. Then I am thinking of having another makefile residing in the directory above so I can run... (1 Reply)
Discussion started by: kristinu
1 Replies

5. UNIX for Dummies Questions & Answers

Linux kernel modules makefiles doubts

This query is regarding the makefiles of linux kernel modules. I saw at some sites on net it is suggesting to include the following path: KERNEL_SOURCE := /usr/src/linux... while at some places it is askibg to include /lib/modules path: KERNEL_SOURCE := /lib/modules/2.6.27-7-generic/build... (0 Replies)
Discussion started by: rupeshkp728
0 Replies

6. UNIX for Advanced & Expert Users

makefiles

Solved........ (0 Replies)
Discussion started by: klam
0 Replies

7. Shell Programming and Scripting

How can I print variables im using in makefiles?

for example in my make file im building path from env variables and string but need to see what is did what is the best way to print the result? say I have in my Makefile : exec_prefix = $(RUN_ENV_LOCAL)/apache and I will like to print the exec_prefix value , how can it be done ? (1 Reply)
Discussion started by: umen
1 Replies

8. UNIX for Dummies Questions & Answers

makefiles in a directory and subdirectories

I need to develop a makefile that spans across directories. For example, let's say i have an upper level directory (main) and about 2 subdirectories. I want my .cpp files and .o files to be in one subdirectory. I want my .a files to be in the other subdirectory. The .a files are made up of the... (0 Replies)
Discussion started by: benjie_asu
0 Replies

9. UNIX for Dummies Questions & Answers

Problem With Makefiles, how do I install gandalf vision library?

Hi, I am trying to install Gandalf, a computer vision and numerical library (http://gandalf-library.sourceforge.net/). I am using Cygwin on a Windows machine and have tried everything to get this to build, but to no avail. Gcc, make, and libtool are all included in my Cygwin install. I... (1 Reply)
Discussion started by: justinh
1 Replies

10. UNIX for Advanced & Expert Users

Combining makefiles

I have concatenated 2 makefiles, to produce 1 however it is not running all of the code, producing a fatal error: symbol referencing errors. No output written. Can anybody please help? (4 Replies)
Discussion started by: Dan Rooney
4 Replies
Login or Register to Ask a Question