C프로그래밍 OS에 따른 컴파일 환경 통합 makefile 만들기

Linux, AIX, SunOS, HP 등 다양한 OS 환경에서 makefile을 만들고 관리하기 번거로움을 줄이고자 통합한 버전입니다.
필요한 부분을 적당히 수정해서 사용하시면 됩니다.
참고로, mk 파일은 스냥 shellscript 파일이고, makefile은 make 프로그램에서 사용할 설정파일이라고 보시면됩니다.
고로, mk는 자유롭게 이름을 붙이셔도 됩니다.
실행시에는 mk를 치시면 됩니다.

====================================================================================================================
 * mk 스크립트 템플릿 -  OS별 옵션을 구별하여 make 처리하도록 함 (binary, shared library 공통으로 사용 가능)
====================================================================================================================
#!/bin/ksh
# ==========================================================
# mk script
# -g : Insert source codes
# -w : Ignore warning messages(linux, AIX)
# -qsuppress : Ignore warning messages(AIX)
# -fPIC : Position Independence Code (Linux)
# ==========================================================
UNAME=`uname`

if [ "$UNAME" = "Linux" ]
then
    export CC=gcc
    export OS="-D_OS_LINUX"
    export CFLAGS="${OS} -g -O2 -m64 -Wall -fPIC -w"
    export LFLAGS="-dynamic"
    export SHFLAGS="-shared"

elif [ "$UNAME" = "AIX" ]
then
    export CC=xlc
    export OS="-D_OS_AIX"
    export CFLAGS="${OS} -g -O2 -q64 -w -qcpluscmt -qsuppress=1506-068"
    export LFLAGS="-brtl -lbsd -lpthread -ldl -lz"
    export SHFLAGS="-G -bM:SRE"

elif [ "$UNAME" = "HP-UX" ]
then
    export CC=cc
    OS=`uname -a | awk '{if($5 == "ia64") {print $5}}'`

    if [ "$OS" = "ia64" ]
    then
        export OS="-D_OS_HPUX"
    else
        export OS="-D_OS_HPUX_PARISC"
    fi
    export CFLAGS="${OS} -g -O2 +DD64"
    export LFLAGS="-O2 +DD64"
    export SHFLAGS="-b -z"

elif [ "$UNAME" = "SunOS" ]
then
    export CC=cc
    export OS="-D_OS_SUN"
    export CFLAGS="${OS} -g -O2 -m64 -KPIC"
    export LFLAGS="-g -O2 -m64 -dy -lsocket -lnsl"
    export SHFLAGS="-G"
else
    exit
fi

echo "-------------------------------------------------";
echo " ${UNAME} Compile을 시작합니다...";
echo "-------------------------------------------------";
make $1


====================================================================================================================
 * makefile 템플릿1 : Application
  (mk 스크립트 파일을 통해 실제 컴파일 수행)
====================================================================================================================
# ----------------------------------------------------------
# makefile with mk
# - TARGET_LIST: Multiple targets can be separated by space.
# ----------------------------------------------------------
TARGET=FileTransServer FileTransClient

APPHOME=/FEP/FileTrans

BINDIR=${APPHOME}/bin
INCDIR=${APPHOME}/inc

INCS=-I. -I${INCDIR}
LIBS=-L.
DEFS=

# ----------------------------------------------------------
# Compile
# ----------------------------------------------------------
.SUFFIXES : .c .o

.c.o:
    $(CC) $(CFLAGS) $(INCS) $(DEFS) -c $<

all:$(TARGET)

# ----------------------------------------------------------
# Linking
# $(CC) $(LFLAGS) $(LIBS) -o $@ $<
# $(CC) $(LFLAGS) $(LIBS) -o $@ $@.o
# ----------------------------------------------------------
FileTransServer:clean FileTransServer.o
    $(CC) $(LFLAGS) $(LIBS) -o $@ $<
FileTransClient:clean FileTransClient.o
    $(CC) $(LFLAGS) $(LIBS) -o $@ $<

# ----------------------------------------------------------
# Install
# ----------------------------------------------------------
install:all
    cp -f $(TARGET) $(BINDIR)

# ----------------------------------------------------------
# Clean
# ----------------------------------------------------------
clean:
    rm -f $(TARGET) *.o

댓글

이 블로그의 인기 게시물

[수평계] 간편 수평계 - 카메라 화면을 보면서 쉽게 수평 측정

[LED 전광판] 글자 애니매에션, 응원도구로 유용한 LED 형 어플이 오픈합니다.