# 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