简体   繁体   中英

I've created a Makefile in c that should creates more than one executable, but it does not work

WHAT I NEED TO DO

I'm trying to create a Makefile in c that should create three executable from three different.c files. I'll want to create Lez4Es1, Lez4Es1v2 and Lez4Es3 as my executable compiling and linking in two different stages. Something as:

gcc -std=c99 -Wall -pedantic Lez4Es1.c -c
gcc -std=c99 -Wall -pedantic Lez4Es1.o -o Lez4Es1

gcc -std=c99 -Wall -pedantic Lez4Es1v2.c -c
gcc -std=c99 -Wall -pedantic Lez4Es1.v2 -o Lez4Es1v2

gcc -std=c99 -Wall -pedantic Lez4Es3.c -c
gcc -std=c99 -Wall -pedantic Lez4Es3.o -o Lez4Es3

MY SOLUTION

Assuming to have all.c files in the same directory i created this Makefile but it does not work:

CC      =   gcc

CFLAGS      +=  -std=c99 -Wall -pedantic -g

TARGETS     =   Lez4Es1     \
                Lez4Es1v2   \
                Lez4Es3     \

.PHONY: all clean cleanall  

% : %.o
    $(CC) $(CFLAGS)  $^ -o $@  

%.o : %.c
    $(CC) $(CFLAGS) -c $^

all : $(TARGETS)

clean : 
    -rm *.o *~ core

cleanall : 
    -rm *.o *.txt -f $(TARGETS) *~ core

PROBLEMS

When i run $ make it creates executable from.c file and not from.o, this is output of compiler:

$ make
    gcc -std=c99 -Wall -pedantic -g    Lez4Es1.c   -o Lez4Es1
    gcc -std=c99 -Wall -pedantic -g    Lez4Es1v2.c   -o Lez4Es1v2
    gcc -std=c99 -Wall -pedantic -g    Lez4Es3.c   -o Lez4Es3

How to fix to let him do the things i want to do? There is a method to give executable files a different name than.o files?

Sorry for my bad english and if i didn't explain it well i'm ready to edit it and give you more details, thank you.

Try deleting the built-in rule that creates executables from source files:

% : %.c

(a pattern rule with no recipe cancels that rule).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM