Thread: Simple makefile Problem

  1. #1
    Registered User
    Join Date
    May 2004
    Posts
    16

    Unhappy Simple makefile Problem

    Hey Guys,

    I am new to unix environment. I am trying to write a make file that compiles C files and then links all the object files into a .a file.

    here is my code...

    mtc.a : simple.o, simple1.o;
    # Compiling source files
    simple.o : simple.c
    gcc -c simple.c
    simple1.o : simple1.c
    gcc -c simple1.c
    # End of makefile

    The file name for this is makeunix. When I type makeunix it displays series of errors like
    nwline or ; expected,

    simple.o cannot be execute
    : No such file or directory
    gcc no input files

    simple1.o cannot be execute
    : No such file or directory
    gcc no input files

    Even though all the files mtc.a, simple.o, simple.c, simple1.o, simple1.c exist in the same directory.

    Anyhelp in this regard is very much appreciated.

    Best Regards,
    Kishore

  2. #2
    Crazy Fool Perspective's Avatar
    Join Date
    Jan 2003
    Location
    Canada
    Posts
    2,640
    >> mtc.a : simple.o, simple1.o;

    lose the comma and semi-colon.

    mtc.a: simple.o simple1.o
    <tab> <gcc me a .a lib>

  3. #3
    Registered User
    Join Date
    May 2004
    Posts
    16
    Thanks for your reply Perspective...

    I changed it to,

    mtc.a : simple.o simple1.o
    gcc me a .a lib

    # Compiling source files
    simple.o : simple.c
    gcc -c simple.c
    simple1.o : simple1.c
    gcc -c simple1.c

    # End of makefile

    It says me a .a lib

    gcc: me: No such file or Directory
    gcc: a: No such file or Directory
    gcc: .a: No such file or Directory

    and it still says,
    mtc.a: syntax error at line 2: 'Newline or ;' expected.

  4. #4
    Gawking at stupidity
    Join Date
    Jul 2004
    Location
    Oregon, USA
    Posts
    3,218
    I think you have the wrong idea about makefiles. First of all, the 'make' program looks for a few different filenames that contain the build rules. The most commonly used one by far is Makefile. Once the build rules are set up correctly you should just be able to type 'make' and watch it go.

    What it looks like you're doing is trying to write a script that compiles the program for you, but the contents of your script look a lot more like a standard Makefile rather than a shell script.

  5. #5
    Registered User
    Join Date
    May 2004
    Posts
    16
    Thanks for the insights on the make itsme86.

    Yes youre right...it is just a makefile. And I am writing a makefile script (not shell script )that does the compilation and link the object files together and produce the .a file as it is asked for in the target field.

    # start of makefile
    #linking in progress

    mtc.a : simple.o simple1.o

    # Compiling source files
    simple.o : simple.c
    gcc -c simple.c
    simple1.o : simple1.c
    gcc -c simple1.c

    # End of makefile

    When I execute this script, (I think) I am asking it to compile simple.c & simple1.c files and thus produced object files are to be linked to produce one mtc.a file (top of the script).

    All it says now is that no object files exist even though they are existing in the folder.

    If this is not the way to write this, how can that be done ??? Thanx for your help

  6. #6
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,659
    Make already knows how to turn C files into object files, so all you really need is this
    Code:
    # A makefile
    
    OBJ = simple1.o simple2.o
    
    foo.a : $(OBJ)
    	ar cr $@ $^
    Just make sure the ar command is prefixed by a real tab character, and not just a number of spaces.

    Save this with the name Makefile
    Then just type make at the command prompt

    This is what you should see
    Code:
    $ make
    cc    -c -o simple1.o simple1.c
    cc    -c -o simple1.o simple2.c
    ar cr foo.a simple1.o simple2.o
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. A simple file I/O problem
    By eecoder in forum C Programming
    Replies: 10
    Last Post: 10-16-2010, 11:00 PM
  2. Makefile Problem: None rule to make target
    By chris24300 in forum Linux Programming
    Replies: 25
    Last Post: 06-17-2009, 09:45 AM
  3. A simple problem with "include" definition and makefile
    By junketeer in forum C++ Programming
    Replies: 2
    Last Post: 03-31-2009, 03:01 AM
  4. Problem in very simple code
    By richdb in forum C Programming
    Replies: 22
    Last Post: 01-14-2006, 09:10 PM
  5. Simple Initialization Problem
    By PsyK in forum C++ Programming
    Replies: 7
    Last Post: 04-30-2004, 07:37 PM