# link 기본
#     g++ -o hellox -Wall -D_REENTRANT         \
#         /usr/lib/i386-linux-gnu/libpthread.a \
#         /usr/X11R6/lib/libX11.so             \
#         ./libprint.so                        \
#         ./hellox.o                          
# g++
#     -l라이브러리파일명중lib제외한부분[libXXXX.a]
#         [예] -lpthread -> libpthread.a
#     -L라이브러리파일libXXXX.a찾을경로
#         [예] $(CXX) -o hellox -Wall -D_REENTRANT -lpthread /usr/X11R6/lib/libX11.so hellox.o
#              $(CXX) -o hellox -Wall -D_REENTRANT -lpthread -lX11 hellox.o -L/usr/X11R6/lib
#     -Wl,ld명령파라메터
#         ld명령에 파라메터 전송 구분자, 구분자,는 공백문자로 변경됨
#         -Wl,이후 공백문자를 사용하지말것

LIB_PTHREAD     = /usr/lib/i386-linux-gnu/libpthread.a

INC_X11_DESKTOP = /usr/X11R6/include
LIB_X11_DESKTOP = /usr/X11R6/lib/libX11.so
LIB_X11_DEUTA   = /opt/mft1-gcc/target/extended/xlib6g/usr/X11R6/lib/libX11.so.6

ifeq '$(MAKECMDGOALS)' ''
prepared_error:
 @echo "No target!"
endif

ifeq '$(MAKECMDGOALS)' 'all'
INC_X11 = $(INC_X11_DESKTOP)
LIB_X11 = $(LIB_X11_DESKTOP)
endif

compile:
 @echo ""
 @echo "============================================================================="
 @echo "compile"
 @echo "============================================================================="
 $(CXX) -o hellox.o    -ansi -pedantic -Wall -I$(INC_X11) -c  hellox.c
 $(CXX) -o libprint.so -ansi -pedantic -Wall -fPIC -shared    libprint.c -Wl,-Map,libprint.map

link:
 @echo ""
 @echo "============================================================================="
 @echo "link"
 @echo "============================================================================="
 $(CXX) -o hellox      -Wall -D_REENTRANT $(LIB_PTHREAD) $(LIB_X11) libprint.so hellox.o -Wl,--rpath,.,-Map,hellox.map

clean:
 @echo ""
 @echo "============================================================================="
 @echo "clean"
 @echo "============================================================================="
 rm -f *.o
 rm -f *.so
 rm -f *.map
 rm -f hellox
 
all: clean compile link

execute:
 @echo ""
 @echo "============================================================================="
 @echo "execute"
 @echo "============================================================================="
 ./hellox

show_make:
 @echo ""
 @echo "============================================================================="
 @echo "show make variables"
 @echo "============================================================================="
 @echo "MAKEFILES    = $(MAKEFILES)"
 @echo "VPATH        = $(VPATH)"
 @echo "SHELL        = $(SHELL)"
 @echo "MAKESHELL    = $(MAKESHELL)"
 @echo "MAKE         = $(MAKE)"
 @echo "MAKELEVEL    = $(MAKELEVEL)"
 @echo "MAKEFLAGS    = $(MAKEFLAGS)"
 @echo "MAKECMDGOALS = $(MAKECMDGOALS)"
 @echo "CURDIR       = $(CURDIR)"
 @echo "SUFFIXES     = $(SUFFIXES)"

show_rpath:
 @echo ""
 @echo "============================================================================="
 @echo "show rpath"
 @echo "============================================================================="
 objdump -x hellox |grep RPATH
# readelf -d hellox |head -20

Posted by 셈말짓기 :