• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1215
  • Last Modified:

Makefile

Hi,

I'm trying to reuse a makefile, unfortuneatly i'm not that familar with their structure and am utter perplexed. Hopefully someone will be able to lend a hand. The error message I'm getting is:
"No rule to make target "test.o" needed by test.x. STOP"

******makefile***************
TARGET_ARCH = cygwin
CC = g++
OPT    = -O3
DEBUG  =    
CFLAGS = $(DEBUG) $(OPT) -fexceptions
MODULE = test
SRCS = test.cpp
OBJS = $(SRCS:.cpp=.o)
include ./Makefile.defs

****** makefile.defs***********
SYSTEMC = /cgydrive/c/SystemC/systemc-2.0.1
INCDIR = -I. -I.. -I$(SYSTEMC)/include
LIBDIR = -L. -L.. -L$(SYSTEMC)/lib-$(TARGET_ARCH)
LIBS   =  -lsystemc -lm $(EXTRA_LIBS)
EXE    = $(MODULE).x
.SUFFIXES: .cc .cpp .o .x
$(EXE): $(OBJS) $(SYSTEMC)/lib-$(TARGET_ARCH)/libsystemc.a
      $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(LIBS) 2>&1 | c++filt
.cpp.o:
      $(CC) $(CFLAGS) $(INCDIR) -c $<
.cc.o:
      $(CC) $(CFLAGS) $(INCDIR) -c $<
clean::
      rm -f $(OBJS) *~ $(EXE) core
ultraclean: clean
      rm -f Makefile.deps
Makefile.deps:
#      $(CC) $(CFLAGS) $(INCDIR) -M $(SRCS) >> Makefile.deps
#include Makefile.deps
0
trican
Asked:
trican
  • 4
  • 2
1 Solution
 
jkrCommented:
Try

OBJS = test.o
0
 
stefan73Commented:
Hi trican,
You should check if you either have test.cc or test.cpp.

Cheers!

Stefan
0
 
tricanAuthor Commented:
Stefan - the file exists - test.h & test.cpp

jkr - when i do that, i get a message about the library I've included - no rule to make target "/cgydrive/c .....", but this has already been compiled

confused :-(

0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
stefan73Commented:
trican,
> message about the library

You have named the library as a dependency in the
$(EXE): $(OBJS) $(SYSTEMC)/lib-$(TARGET_ARCH)/libsystemc.a

line, but you don't have a rule how to re-create the library.

Ouch:
SYSTEMC = /cgydrive/c/SystemC/systemc-2.0.1

Correct the typo and run again.
0
 
tricanAuthor Commented:
ouch indeed....
the library (systemc) contains its own makefiles etcso it seems to be getting more complicated by the second.
0
 
tricanAuthor Commented:
ok, things are getting slightly better,

here now is the error message i'm getting:
g++ -O3 -Wall -I. -I.. -I/home/*****/systemc-2.0.1/include -c -o src/Test.o src/Test.cpp
g++ -O3 -Wall -I. -I.. -I/home/****/systemc-2.0.1/include -L. -L.. -L/home/*****/systemc-2.0.1/lib-linux -o test.exe src/Test.o   -lsystemc -lm 2>&1 | c++filt
/home/******/systemc-2.0.1/lib-linux/libsystemc.a(sc_main.o): In function `main':
sc_main.o(.text+0x1d): undefined reference to `sc_main'
collect2: ld returned 1 exit status




And this is the make file I'm using now.......


#Setup libraries etc
TARGET_ARCH = linux
SYSTEMC = /home/**********/systemc-2.0.1
INCDIR = -I. -I.. -I$(SYSTEMC)/include
LIBDIR = -L. -L.. -L$(SYSTEMC)/lib-$(TARGET_ARCH)
LIBS   =  -lsystemc -lm

#BME_1xPE makefile
CC     = g++
OPT    = -O3
DEBUG  = -g
OTHER  = -Wall
CFLAGS = $(OPT) $(OTHER)
#CFLAGS = $(DEBUG) $(OTHER) debug version
MODULE = test
EXE    = $(MODULE).exe

SRCS:=  src/Test.cpp
OBJS = $(SRCS:%.cpp=%.o)
#OBJS = $(SRCS:.cpp=.o) - when i use this it doesn't create the .o file

$(EXE) : $(OBJS) $(SYSTEMC)/lib-$(TARGET_ARCH)/libsystemc.a  
      $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(LIBS) 2>&1 | c++filt

.cpp.o:
      $(CC) $(CFLAGS) $(INCDIR) -c $<

#%.o : %.cpp
#      $(CC) $(CFLAGS) $(INCDIR) -c -o $@ $<  

# cleaning everything that can be automatically recreated with "make".
clean:
      /bin/rm -f $(EXE) $(OBJS)

#dependancies
Test.o     : include/test.h
0
 
tricanAuthor Commented:
ok figured it out myself - neverthe less the pointers were helpful - so I'll still award the points to  stefan73

incidentlyHow do you force the object files to be placed in a directory other than where the source file is located (just for tidyness)
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now