`
xitonga
  • 浏览: 586320 次
文章分类
社区版块
存档分类
最新评论

AIX系统下的Makefile

 
阅读更多

因AIX下的Makefile目前还不支持Makefile函数,如果将Linux下的Makefile放入AIX系统下,会出现很多莫名其妙的错误。因此,很有必要总结一下AIX下Makefile的使用场景:

一、编译多个C文件生成可执行文件
如:test.h test.c main.c->main可执行文件
CC = cc
CFLAGS = -q64

INCLUDE = -I. \
                        -I$(HOME)/incl \
                        -I$(HOME)/src/incl
LIB_PATH = -L. \
                        -L$(HOME)/lib \
                        -L/usr/lib 

LIB_LIST = -lbase -lxml -lpkg  #(注:这里的动态链接库必须在LD_LIBRARY_PATH的指定路径下,否则会报找不到动态链接库)

OBJS = test.o main.o
TARGET = main


.PHONY: all clean
all: $(TARGET)
$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(INCLUDE) $(LIB_PATH) $(LIB_LIST)

.SUFFIXES: .o .c

.c.o:
    $(CC) $(CFLAGS) $(INCLUDE) -c $*.c

clean:
    rm -f $(OBJS) 
二、编译多个C文件,生成动态链接库
如:test.h test.c abc.c->libabc.so动态链接库
OBJS = test.o abc.o
TARGET = libabc.so

.PHONY: all clean

all: $(TARGET)
$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -G -o $(TARGET) $(OBJS) $(INCLUDE)


.SUFFIXES: .o .c

.c.o:
    $(CC) $(CFLAGS) $(INCLUDE) -c $*.c

clean:
    rm -f $(OBJS) 
三、编译多个EC和C文件,生成可执行文件
如:编译test.h test.ec main.c->main可执行文件
OBJS = test.o main.o
TARGET = main

all: $(TARGET)
$(TARGET): $(OBJS)
    $(ESQL) $(CFLAGS) -o $(TARGET) $(OBJS) $(INCLUDE) $(LIB_PATH) $(LIB_LIST)

.SUFFIXES: .ec .c .o
.ec.o:
    rm -f $*.c
    $(ESQL) $(CFLAGS) $(INCLUDE) -c $*.ec
    rm -f $*.c

.c.o:
    $(CC) $(CFLAGS) $(INCLUDE) -c $*.c
四、编译多个EC和C文件,生成动态链接库
如:test.h test.ec abc.c->libabc.so动态链接库
CC = cc
ESQL = $(INFORMIXDIR)/bin/esql

CFLAGS = -q64

INCLUDE = -I. \
                        -I$(INFORMIXDIR)/incl/esql \
                        -I$(INFORMIXDIR)/incl/public 
LIB_PATH = -L$(INFORMIXDIR)/lib \
                        -L$(INFORMIXDIR)/lib/esql

LIB_LIST = -lbase -ltest -lhaha #(注:这里的动态链接库必须在LD_LIBRARY_PATH的指定路径下,否则会报找不到动态链接库)

OBJS = test.o abc.o
TARGET = libabc.so

.PHONY: all clean

all: $(TARGET)
$(TARGET): $(OBJS)
    $(ESQL) $(CFLAGS) -G -o $(TARGET) $(OBJS) $(LIB_PATH) $(LIB_LIST) $(INCLUDE)

.SUFFIXES: .ec .c .o
.ec.o:
    rm -f $*.c
    $(ESQL) $(CFLAGS) $(INCLUDE) -c $*.ec
    rm -f $*.c
.c.o:
    $(CC) $(CFLAGS) $(INCLUDE) -c $*.c

clean:
    rm -fr $(OBJS) $(TARGET)
作者:邹祁峰
2013年01月06日
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics