변경된 파일만 빌드되도록 make를 사용하여 빌드하는 방법 [닫기]

변경된 파일만 빌드되도록 make를 사용하여 빌드하는 방법 [닫기]

내 소스 코드는 src 디렉터리에 있고 개체 파일은 AS5 디렉터리에 있습니다.

이것은 내 make 파일입니다.

CC = g++
CFLAGS =-c -std=c99 -g -w -Wno-deprecated -D_FILE_OFFSET_BITS=64 -DATOMIC_BUILT_IN -DIB_USE_STD_STRING -Wall -Wno-switch
WORKING_DIR     = $(HOME)/JYOTI
PLATFORM        = AS5

BASICOBJS            = JYOTI.o OnixMDP3InputAdapter.o FixInputAdapter.o SGXInputAdapter.o SGXITCHProcess.o DGCXTBTInputAdapter.o DGCXMulticastInputAdapter.o NSECMDirectGateWay.o Profiler.o MCXXStreamInputAdapter.o MultipleConnectionReceiver.o EClientSocketBase.o EPosixClientSocket.o IBInputAdapter.o IDCInputAdapter.o NSEUdpInputAdapter.o InputAdapter.o BSEInputAdapter.o DGCXInputAdapter.o EmapiTagParser.o MCXInputAdapter.o OutputAdapter.o TBTProcess.o DataStructure.o NSETBTDataStructure.o LogQueue.o ServiceManager.o TCPSender.o PracticalSocket.o PriceMonitor.o Latency.o TCPInputAdapter.o AvgDiff.o MulticastInputAdapter.o MulticastOutputAdapter.o TBTInputAdapter.o LogStandard.o Common.o Event.o Utils.o MultipleIndexOutputAdapter.o DependendLib.o StringSplitter.o

OBJSWITHSYM     =SymExample.o SymFlusher.o SymInputAdapter.o

OBJWITHOADT     =  CFixGateWay.o DMA.o FixClient.o NSECMDirectGateWay.o MStrat2Way.o MStratOpt.o Basket.o IndexBasket.o RevBasket.o NSECDDirectGateWay.o BseGateWay.o Portfolio.o BasePortfolio.o MyPortfolio.o SLOFIX.o SLOFIXNEG.o SpreadBidding.o TwoLIOCSpd.o LatencyCheckPortfolio.o SLOSPR.o SLOSPRNEG.o SLO3WAY.o MStrat.o MulLegSynFut.o MAMR.o NSEFOGateWay.o NSECMGateWay.o SGXGateWay.o OrderAdapter.o OrderAdaptersInterface.o TCPListener.o FixGateWay.o DFixGateWay.o MAMRA.o FConBx.o

OBJMCXOADT      =MCXGateWay.o

OBJS    =$(BASICOBJS)

ifneq ($(AM),64)
        CC      +=-m32
        CFLAGS  += -march=i686
        SYME="::::      To Compile 64 bit binary, Usage: <make AM=64>"
endif


ifneq ($(SE),0)
        SE=1
        SYME+="::::      To Compile without flex, Usage: <make SE=0>"
else
        SE=0
endif

ifeq ($(SE),1)
        OBJS    += $(OBJSWITHSYM)
        CFLAGS  +=-DSYMAVAILABLE
endif

ifeq ($(ML),1)
        CFLAGS  +=-D_MESURE_LATENCY
else
        SYME+=" :::::  To Enable Latency Mesurement, Usage: <make ML=1>"
endif
ifeq ($(OADT),1)
        OBJS    +=$(OBJWITHOADT)
        CFLAGS +=-DISORDADPT
        LIB     += -lssl
else
        SYME+=" :::::  To Enable Order Adapter, Usage: <make OADT=1>"
endif

ifeq ($(MCXOADT),1)
        OBJS    +=$(OBJMCXOADT)
        CFLAGS  +=-DISMCXORDADPT
else
        SYME+=" :::::  To Enable MCX Order Adapter, Usage: <make MCXOADT=1>"
endif

ifeq ($(FIXADT),1)
        CFLAGS +=-DISFIXADPT
else
        SYME+=" :::::  To Enable Fix Adapter, Usage: <make OADT=1 FIXADT=1>"
endif

ifeq ($(COND),1)
        CFLAGS +=-DISCONDITION
else
        SYME+=" :::::  To Enable Condition variable, Usage: <make COND=1>"
endif

LDFLAGS =  -L"../../lib" -L"/usr/local/lib" -Wl,-rpath,../../lib  -Wl,-rpath=/usr/local/lib -Wl,-rpath=./lib -lboost_thread -lboost_system -lboost_atomic -L/usr/local/lib  -Wl,-rpath=/home/sys64/tbb2017_20161128oss/lib/intel64/gcc4.1/ -L/home/sys64/tbb2017_20161128oss/lib/intel64/gcc4.1/ #/usr/lib64/libonload_ext.so

INC      = -I$(FLEXSYS)/lzo-1.07/src
INC     += -I$(FLEXSYS)/lzo-1.07/include
INC     += -I$(FLEXAPP)/flex/apinew/include
INC     += -I$(WORKING_DIR)/inc
INC     += -I$(WORKING_DIR)/inc/IBinc
INC     += -I$(WORKING_DIR)/src
INC     += -I"/usr/include/"
INC     += -I"/usr/include/openssl/"
INC     += -I"../boost_1_55_0/"
INC     += -I"/usr/local/include"
INC     += -I"../tbb2017_20161128oss/include/"


LIB     += $(WORKING_DIR)/lib64/libsymproxy.a
LIB     += $(WORKING_DIR)/lib64/libflexapi.a
LIB     += $(WORKING_DIR)/lib/libACE.so
LIB     += $(WORKING_DIR)/lib/libOnixS.CmeMdp3HandlerCpp.so
LIB     += /usr/local/lib/libz.a
LIB     +=/usr/local/lib/liblzo.a
#LIB     +=$(WORKING_DIR)/lib/libqed.a
#LIB     +=$(WORKING_DIR)/lib/libconfig.a
LIB     += -lm -lstdc++ -z muldefs -lpthread -lrt -ltbb

DEF      = -DFOR_UNIX -DFOR_LINUX
DEF     += -D_REENTRANT
DEF     += -D_POSIX_PTHREAD_SEMANTICS
DEF     += -D__STL_PTHREADS

RM      = rm -rf

all: JYOTI

%.o : %.cpp

        -@if [ ! -d $(PLATFORM) ] ; then mkdir -p $(PLATFORM); fi;
        $(CC) $(CFLAGS) $(INC) $(DEF) $< -o $(PLATFORM)/$@

JYOTI: clean $(OBJS)
        cd $(PLATFORM);$(CC) $(LDFLAGS) $(OBJS) $(LIB) -o $@



clean:
        $(RM) log AS5/*
        @echo $(SYME)
        @echo

답변1

먼저 대상 clean에서 JYOTI종속성을 제거 해야 합니다. 그렇지 않으면 모든 것이 항상 처음부터 시작됩니다.

다음으로 패턴 규칙에 대상 파일 디렉터리를 포함해야 합니다. 예를 들면 다음과 같습니다.

$(PLATFORM)/%.o: %.cpp
        $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<

가장 간단한 방법은 $(PLATFORM) 디렉터리 자체가 항상 존재하고 깨끗한 대상에 의해 삭제되지 않도록 하는 것입니다.

이렇게 하려면 $(PLATFORM)개체 목록에 디렉터리도 지정해야 합니다. 예:

OBJS = $(BASICOBJS:%=$(PLATFORM)/%)

관련 정보