您的位置:首页 > 运维架构 > Linux

linux的aix下的makefile参考

2015-11-01 22:28 375 查看


一、详解

(1)简单模板makefile:

CC =
OBJS =
CFLAGS =
TARGET =

all:$(TARGET)

$(TARGET):$(OBJS)
$(CC) $(CFLAGS) -o $@ $(OBJS)
.SUFFIXES:.o .h
.SUFFIXES:.cpp .o

.cpp.o:
$(CC) -c $(CFLAGS) -o $@ $<
clean:
rm -f $(OBJS) $(TARGET) core *.log
ok:
./$(TARGET)
(2)Aix生成可执行文件(包括oracle库)
CC = xlC_r -q64
CFLAGS = -g
OBJS = main.o cdc_sync.o source_data.o target_data.o
TARGET = cdc_sync

LIBS=-I$(ORACLE_HOME)/precomp/public \
-I$(ORACLE_HOME)/rdbms/demo -I$(ORACLE_HOME)/rdbms/public
PUBFLAGS = -L$(ORACLE_HOME)/lib -L$(ORACLE_HOME)/rdbms/lib -lclntsh -locci

all:$(TARGET)

$(TARGET):$(OBJS)
$(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS) $(PUBFLAGS)
.SUFFIXES:.o .h
.SUFFIXES:.cpp .o
.cpp.o:
$(CC) -c $(CFLAGS) -o $@ $< $(LIBS) $(PUBFLAGS)

ok:
./$(TARGET)
clean:
rm -rf $(TARGET) $(OBJS) core *.log
(3)Aix生成动态库
CC = xlc_r
PUBFLAGS = -qthreaded -DAIX -DAIX64 -q64 -bhalt:5 -qstaticinline -qrtti=all -lclntsh -lpthread -lm -lc -lnsl -lrt -ldl

CFLAGS = -I./
OBJS = mario.o mario_akg.o mario_conn.o mario_log.o mario_network.o mario_util.o
TARGET= libmario_tcp.so

SOFLAGS =-G -bM:SRE -bnoentry -qrtti=all -qmkshrobj
all:$(TARGET)

$(TARGET):$(OBJS)
$(CC) $(CFLAGS) -o $@ $(OBJS) $(PUBFLAGS) $(SOFLAGS)
.SUFFIXES:.o .h
.SUFFIXES:.c .o

.c.o:
$(CC) $(PUBFLAGS) -c $(CFLAGS) -o $@ $<
clean:
rm -f $(OBJS) $(LINK_OBJ) $(TARGET) core *.log
CC = xlc_r
PUBFLAGS = -qthreaded -DAIX -DAIX64 -q64 -bhalt:5 -qstaticinline -qrtti=all -lclntsh -lpthread -lm -lc -lnsl -lrt -ldl

CFLAGS = -I./
OBJS = mario.o mario_akg.o mario_conn.o mario_log.o mario_network.o mario_util.o
TARGET= libmario_tcp.so

SOFLAGS =-G -bM:SRE -bnoentry -qrtti=all -qmkshrobj
all:$(TARGET)

$(TARGET):$(OBJS)
$(CC) $(CFLAGS) -o $@ $(OBJS) $(PUBFLAGS) $(SOFLAGS)
.SUFFIXES:.o .h
.SUFFIXES:.c .o

.c.o:
$(CC) $(PUBFLAGS) -c $(CFLAGS) -o $@ $<
clean:
rm -f $(OBJS) $(LINK_OBJ) $(TARGET) core *.log
(4)编译当前目录及子目录下所有makefile的shell脚本
#!/usr/bin/sh
CURRENT_DIR=`pwd`
echo "开始编译当前目录下所有源码"
TMP_DIR=`find ./ -name makefile`
for MK_DIR in $TMP_DIR
do
DIR_LEN=`expr length "$MK_DIR"`
let DIR_LEN=DIR_LEN-8
cd `echo $MK_DIR |cut -c 1-"$DIR_LEN"`
pwd
make clean
make all
cd $CURRENT_DIR
done
echo "完成"
(5)包含一个静态库生成的例子(部分)
include ../make_inc/mk_inc.mk
CFLAGS = $(PCLIBFLAGS)
OBJS=  src/Iconfig.o src/proc_para.o
DEFINED = -D _VERSION=0x10010000  $(PUBDEFINED)
TARGET= libconfigure.so
STALIB= libconfig.a
TESTAPP=test4para
all:$(TARGET)

test:$(TESTAPP)

libconfigure.so:$(OBJS)
$(CC) $(CFLAGS) -o $@ $(OBJS) $(PLDFLAGS)  $(SOFLAGS) -L../public/lib -lpublic
cp -f $(TARGET) ../bin
rm -f $(TARGET) *.o

libconfig.a:$(OBJS)
ar $(ARFLAG) $@ $(OBJS)
cp -f $(STALIB) ./lib

test4para:test/test4para.o
$(CC) $(PCFLAGS) -o $@ test/test4para.o $(PLDFLAGS) -Llib -lconfig
rm test/test4para.o

.SUFFIXES:.o .h
.SUFFIXES:.cpp .o

.cpp.o:
$(CC) $(DEFINED) -c $(CFLAGS) -o $@ $<

clean:
rm -f $(OBJS) $(LINK_OBJ) $(TARGET) src/Iconfig.o core *.log
(6)其他makefile参考
##################################################
CC=xlC_r -w  armcc
INCLUDES=-I./include
CFLAGS= $(INCLUDES) -q64  -q32
PLDFLAGS=-l nsl
OBJS=Test7.o call.o
DEBUG_FLAG = -g -D_DEBUG
TARGET= mytest

all:$(TARGET)
mytest:$(OBJS)
$(CC) $(CFLAGS) -o $@ $(OBJS) $(PLDFLAGS)
.SUFFIXES:.o .h
.SUFFIXES:.cpp .o
.cpp.o:
$(CC) $(DEBUG_FLAG) -c $(CFLAGS) -o $@ $<
clean:
rm -f $(OBJS) $(TARGET) core *.log
#####################################################
include ../make_inc/mk_inc.mk
CFLAGS = $(PCLIBFLAGS)
LIBS=-L$(TUXDIR)/lib -lwsc -lbuft -lgpnet -lfml -lfml32 -lengine -lpthread -lnsl -lz -lm -lcrypt -lregistry -ldl -w
OBJS= ServiceOneCard.o one_card.o MsgDeal.o pubFunc.o tux_call.o
DEFINED = -DSHOW_INFO -DLZY_C_PLUS_PLUS -DPROXY_PART
TARGET= OneCard.dll
all:$(TARGET)

OneCard.dll:$(OBJS)
$(CC) $(CFLAGS) $(LIBS) -o $@ $(OBJS)  $(PLDFLAGS)
#############################################################
CC=xlC_r -g
OBJS= my_card.o

TARGET= my_card
all:$(TARGET)

$(TARGET):$(OBJS)
$(CC) $(CFLAGS) -o $@ $(OBJS)
cp -f $(TARGET) ../bin/plusin
rm -f $(TARGET) *.o
.SUFFIXES:.o .h
.SUFFIXES:.cpp .o

.cpp.o:
$(CC) $(DEFINED) -c $(CFLAGS) -o $@ $<
clean:
rm -f $(OBJS) $(LINK_OBJ) $(TARGET) core *.log
cp -f $(TARGET) ../bin/plusin
rm -f $(TARGET) *.o
.SUFFIXES:.o .h
.SUFFIXES:.cpp .o

.cpp.o:
$(CC) $(DEFINED) -c $(CFLAGS) -o $@ $<
clean:
rm -f $(OBJS) $(LINK_OBJ) $(TARGET) core *.log
##############################################################
CC=xlC_r -w
INCLUDES=-I./include
CFLAGS= $(INCLUDES) -q64
PLDFLAGS=-l nsl
CLOBJS=src/trb_client.o src/trb_rpc_xdr.o src/trb_rpc_clnt.o
SROBJS=src/trb_rpc_svc.o src/trb_rpc_xdr.o
DEBUG_FLAG = -g -D_DEBUG
CLIENT= trb_client
SERVER= trb_server

all:$(SERVER) $(CLIENT)

trb_client:$(CLOBJS)
$(CC) $(CFLAGS) -o $@ $(CLOBJS) $(PLDFLAGS)
trb_server:$(SROBJS)
$(CC) $(CFLAGS) -o $@ $(SROBJS) $(PLDFLAGS)
.SUFFIXES:.o .h
.SUFFIXES:.cpp .o
.cpp.o:
$(CC) $(DEBUG_FLAG) -c $(CFLAGS) -o $@ $<
clean:
rm -f $(CLOBJS) $(SROBJS) $(TARGET) core *.log
#####################################################
##生成my_card.dll无头文件
include ./make_inc/mk_inc.mk
CFLAGS = $(PCLIBFLAGS)
LIBS=-L$(TUXDIR)/lib -lwsc -lbuft -lgpnet -lfml -lfml32 -lengine -lpthread -lnsl -lz -lm -lcrypt -lregistry -ldl -w
OBJS= my_card.o
DEFINED = -DSHOW_INFO -DLZY_C_PLUS_PLUS -DPROXY_PART
TARGET= my_card.dll
all:$(TARGET)

my_card.dll:$(OBJS)
$(CC) $(CFLAGS) $(LIBS) -o $@ $(OBJS)  $(PLDFLAGS)
cp -f $(TARGET) ../bin/plusin
rm -f $(TARGET) *.o
.SUFFIXES:.o .h
.SUFFIXES:.cpp .o

.cpp.o:
$(CC) $(DEFINED) -c $(CFLAGS) -o $@ $<
clean:
rm -f $(OBJS) $(LINK_OBJ) $(TARGET) core *.log
##################################################################
CC=xlC_r -g
OBJS=pthreadT.o
TARGET=pThreadT

all:$(TARGET)

$(TARGET):$(OBJS)
$(CC) -o $@ $(OBJS)
.SUFFIXES:.o .h
.SUFFIXES:.cpp .o

.cpp.o:
$(CC) -o $@ -c $<

.PHONY : clean
clean:
rm -f $(TARGET) $(OBJS) core
#############################################################################
OBJECT=thread.cpp
EXEC=thread
cc=xlC_r
buid:
$(cc) -g -o $(EXEC) $(OBJECT)
clean:
-rm -f $(EXEC)
(7)makefile的通配符测试
src = $(wildcard *.cpp ./sub/*.cpp)
dir = $(notdir $(src))
obj = $(patsubst %.cpp, %.o, $(dir))
all:
@echo $(src)
@echo $(dir)
@echo $(obj)



二、总结

(1)Aix优化参数:http://www.spec.org/cpu2006/flags/CPU2006_flags.20090715.html#Section_optimization
(2)Makefile的详细内容可以参看GNU Make使用手册等其他的文档,还有很多的细节值得学习。
(3)若有建议,请留言,在此先感谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux makefile