Solved

Makefile

Posted on 2004-09-27
7
1,186 Views
Last Modified: 2008-01-09
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
Comment
Question by:trican
  • 4
  • 2
7 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 12165063
Try

OBJS = test.o
0
 
LVL 12

Expert Comment

by:stefan73
ID: 12167093
Hi trican,
You should check if you either have test.cc or test.cpp.

Cheers!

Stefan
0
 
LVL 1

Author Comment

by:trican
ID: 12167199
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
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 12

Accepted Solution

by:
stefan73 earned 400 total points
ID: 12167344
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
 
LVL 1

Author Comment

by:trican
ID: 12171036
ouch indeed....
the library (systemc) contains its own makefiles etcso it seems to be getting more complicated by the second.
0
 
LVL 1

Author Comment

by:trican
ID: 12189977
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
 
LVL 1

Author Comment

by:trican
ID: 12285770
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

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now