Makefile issues

toughwimp11

Senior member
May 8, 2005
415
0
76
This isn't really an urgent issue but I'm trying to learn to make better Makefiles and I've run into an issue and I have no idea why it's happening. I have the following makefile:

Code:
CC = gcc
CFLAGS = -Wall -g -std=gnu99 -lpthread

.PHONY: all clean

all: tests

tests: timerQueue.o test1.c test2.c
    $(CC) $(CFLAGS) -o test1 test1.c timerQueue.o
    $(CC) $(CFLAGS) -o test2 test2.c timerQueue.o

test1: tests
    echo "Running test 1...\nEnd with ctrl-c"
    ./test1

timerQueue.o: timerQueue.c timerQueue.h
    $(CC) $(CFLAGS) -c -o timerQueue.o timerQueue.c

clean: 
    @rm -f *.o test1 test2 *~
Now the 'problem' is that every time I run make, it remakes the tests even if nothing changed. I'm trying to understand why this is happening since the dependencies clearly don't change. any ideas?
 

chronodekar

Senior member
Nov 2, 2008
721
1
0
Are you making any changes between the make runs or did you try running "make" twice in a row ?

-chronodekar
 

degibson

Golden Member
Mar 21, 2008
1,389
0
0
Code:
all: tests

tests: timerQueue.o test1.c test2.c
    $(CC) $(CFLAGS) -o test1 test1.c timerQueue.o
    $(CC) $(CFLAGS) -o test2 test2.c timerQueue.o

test1: tests
    echo "Running test 1...\nEnd with ctrl-c"
    ./test1

Target 'tests' never exists, so Makefile tries to make it every time you run make. Thats why it rebuilds the tests every time.

Try this instead:
Code:
all: test1 test2

test1: timerQueue.o test1.o
    $(CC) $(CCFLAGS) -o $@ timerQueue.o test1.o

test2: timerQueue.o test2.o
    $(CC) $(CCFLAGS) -o $@ timerQueue.o test2.o

test1.o: test1.c
    $(CC) $(CFLAGS) -c $< -o $@  

test2.o: test2.c
    $(CC) $(CFLAGS) -c $< -o $@

run_test1: test1
    @echo "Running test 1...\nEnd with ctrl-c"
    ./test1

Caveat: Our beautiful new code window doesn't include tabs... so I used spaces. Make won't like that if you copy and paste.
 
sale-70-410-exam    | Exam-200-125-pdf    | we-sale-70-410-exam    | hot-sale-70-410-exam    | Latest-exam-700-603-Dumps    | Dumps-98-363-exams-date    | Certs-200-125-date    | Dumps-300-075-exams-date    | hot-sale-book-C8010-726-book    | Hot-Sale-200-310-Exam    | Exam-Description-200-310-dumps?    | hot-sale-book-200-125-book    | Latest-Updated-300-209-Exam    | Dumps-210-260-exams-date    | Download-200-125-Exam-PDF    | Exam-Description-300-101-dumps    | Certs-300-101-date    | Hot-Sale-300-075-Exam    | Latest-exam-200-125-Dumps    | Exam-Description-200-125-dumps    | Latest-Updated-300-075-Exam    | hot-sale-book-210-260-book    | Dumps-200-901-exams-date    | Certs-200-901-date    | Latest-exam-1Z0-062-Dumps    | Hot-Sale-1Z0-062-Exam    | Certs-CSSLP-date    | 100%-Pass-70-383-Exams    | Latest-JN0-360-real-exam-questions    | 100%-Pass-4A0-100-Real-Exam-Questions    | Dumps-300-135-exams-date    | Passed-200-105-Tech-Exams    | Latest-Updated-200-310-Exam    | Download-300-070-Exam-PDF    | Hot-Sale-JN0-360-Exam    | 100%-Pass-JN0-360-Exams    | 100%-Pass-JN0-360-Real-Exam-Questions    | Dumps-JN0-360-exams-date    | Exam-Description-1Z0-876-dumps    | Latest-exam-1Z0-876-Dumps    | Dumps-HPE0-Y53-exams-date    | 2017-Latest-HPE0-Y53-Exam    | 100%-Pass-HPE0-Y53-Real-Exam-Questions    | Pass-4A0-100-Exam    | Latest-4A0-100-Questions    | Dumps-98-365-exams-date    | 2017-Latest-98-365-Exam    | 100%-Pass-VCS-254-Exams    | 2017-Latest-VCS-273-Exam    | Dumps-200-355-exams-date    | 2017-Latest-300-320-Exam    | Pass-300-101-Exam    | 100%-Pass-300-115-Exams    |
http://www.portvapes.co.uk/    | http://www.portvapes.co.uk/    |