Makefile 編譯生成多個可執行文件


CC = gcc
CXX = g++
CFLAGS = -O -DDBG -D_REENTRANT -Wall -DUSE_PTHREAD -pthread
LDFLAGS = -ldl -lnsl -lm -lpthread

#wildcard 對 c文件進行展開
SRCS = $(wildcard *.c) $(wildcard *.cpp) 
#去除路徑信息
dir=$(notdir $(SRCS))
# 把后綴.c 替換成 .o
OBJS = $(patsubst %.c, %.o, $(patsubst %.cpp, %.o,$(dir))  )

//OBJS = main1.o main.o

DATALIBS = dblib/lib.a
ZIPLIBS = ZipCoder/ZipCoder.a  

TARGET = main main1
all: $(TARGET)
    @echo $(SRCS)
    @echo $(dir)
    @echo $(OBJS)
main : main.o $(filter-out main1.o main2.o,$(OBJS)) 
        $(CXX) $(CFLAGS) -o $@ $^ $(LDFLAGS)
main1 :  main1.o $(filter-out main.o main2.o,$(OBJS))
        $(CXX) $(CFLAGS) -o $@ $^ $(LDFLAGS)



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

.PHONY : clean

clean :
    rm -f *.o
    rm -f ../bin/excute

# install:
#         mv Excute excute; cp -f ordermisd ../bin/;

 

Makefile常用理解:

參數: makefile里用${temp} 

定義的變量:  $(temp)

傳遞的操作。 例如: make clean。 其中clean是偽字符.   makefile里的使用:clean:

 

判斷 參數跟變量都只用名字,
ifdef 不用${TARGET} 和 $(TARGET)

ifdef  TARGET
    HOST = ${TARGET}-
else
    HOST = 
endif

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM