Makefile for a library

47,019

Solution 1

Something like:

program_NAME := a.out

SRCS = mylib.c prog.c

.PHONY: all

all: $(program_NAME)

$(program_NAME): $(SRCS) 
    ar -rcs libmylib.a mylib.o
    cc -m32 prog.o -L. -lmylib

might get you started

only just started using makefiles myself and I think they are pretty tricky but once you get them working they make life a lot easier (this ones prob full of bugs but some of the more experienced SO folk will prob be able to help fix them)

As for running, make sure you save the file as 'Makefile' (case is important)

then from the cmd line (ensure you cd to the dir containing the Makefile):

$ make

thats it!

UPDATE

if the intermediate static library is superfluous you could skip it with a Makefile like this:

program_NAME := a.out

SRCS = mylib.c prog.c
OBJS := ${SRCS:.c=.o}

CFLAGS += -m32

program_INCLUDE_DIRS := 
program_LIBRARY_DIRS :=
program_LIBRARIES := mylib

CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))
LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library))

CC=cc

LINK.c := $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)

.PHONY: all

all: $(program_NAME)

$(program_NAME): $(OBJS) 
    $(LINK.c) $(program_OBJS) -o $(program_NAME)

Solution 2

The simplest tutorial to understand make files is available in Cprogramming.com. Once you are through with understanding it then you can go though the make file manual.

Solution 3

I think there is no more detailed procedure than the official documentation of the make command: http://www.gnu.org/software/make/manual/make.html#Overview

Basically you will have to create a target and just put your commands in it. The target could be 'all' if you want it to work when you type 'make'. A good makefile will surely use variables etc to keep it flexible over the lib/sources additions.

Share:
47,019
Aakash Anuj
Author by

Aakash Anuj

Updated on March 28, 2020

Comments

  • Aakash Anuj
    Aakash Anuj over 4 years

    I have to run these 4 commands on the terminal each time I want to execute the program using libraries.

    The lines are

    cc -m32 -c mylib.c
    ar -rcs libmylib.a mylib.o
    cc -m32 -c prog.c
    cc -m32 prog.o -L. -lmylib
    ./a.out
    

    How do I make a makefile for the above commands and run it? A detailed procedure would be appreciated. Thanks.


    Edit: Here is the solution:

    a.out: prog.o libmylib.a
          cc prog.o -L. -lmylib
    
    prog.o: prog.c mylib.h
    
    libprint_int.a: mylib.o
          ar -rcs libmylib.a mylib.o
    
    print_int.o: mylib.c mylib.h
    
    clean:
          rm a.out prog.o libmylib.a mylib.o
    

    This gave an error on line 2 because I used spaces instead of tab.