2017-10-26 20 views
1

저의 석사 학위 논문에서 다중 경로 네트워크 용 수식을 테스트하고 평가할 수있는 도구를 개발하고 있습니다.사용자 지정 도구에서 traceroute를 사용하는 중에 컴파일 문제가 발생했습니다.

traceroute 도구를 사용하여 두 개의 멀티 홈 호스트 사이에서 -s 플래그, src IP 및 dst IP를 전달하여 네트워크를 추적합니다. 여러 소스 및 목적지 IP가 있습니다. 따라서 traceroute는 여러 번 수행됩니다.

나는 편집 작업에 좋지 않습니다. 웹 사이트 https://sourceforge.net/projects/traceroute/files/traceroute/에서 traceroute-2.1.0 용 다운로드 코드는 다음과 같은 "make"관련 파일을 가지고 있습니다.

  • 메이크
  • make.defines
  • make.rules
  • default.rules

내가 traceroute.c의 코드 내 변경 사항을 적용하고, 내가 제대로 컴파일 할 수 있습니다 "make"및 "make install". 그러나 이러한 변경 사항은 시스템의 traceroute 도구로 변경됩니다 (분명히).

내가 원하는 것은 "traceroute"대신 "mytrace"와 같은 새로운 이름을 사용하는 것입니다. 그래서 그것은 traceroute 도구와 충돌하지 않으며 두 도구를 모두 사용할 수 있습니다. cmd line에서 "traceroute"및 "mytrace"를 사용하여 호출합니다.

질문 : 그것을 달성하기 위해 내가 다시 컴파일하기 전에해야하는 변경 사항.

다음은 "makefile"파일의 코드입니다.

# Global Makefile. 
# Global rules, targets etc. 
# 
# See Make.defines for specific configs. 
# 


srcdir = $(CURDIR) 

override TARGET := .MAIN 

dummy: all 

include ./Make.rules 


targets = $(EXEDIRS) $(LIBDIRS) $(MODDIRS) 


# be happy, easy, perfomancy... 
.PHONY: $(subdirs) dummy all force 
.PHONY: depend indent clean distclean libclean release store libs mods 


allprereq := $(EXEDIRS) 

ifneq ($(LIBDIRS),) 
libs: $(LIBDIRS) 
ifneq ($(EXEDIRS),) 
$(EXEDIRS): libs 
else 
allprereq += libs 
endif 
endif 

ifneq ($(MODDIRS),) 
mods: $(MODDIRS) 
ifneq ($(MODUSERS),) 
$(MODUSERS): mods 
else 
allprereq += mods 
endif 
ifneq ($(LIBDIRS),) 
$(MODDIRS): libs 
endif 
endif 

all: $(allprereq) 

depend install: $(allprereq) 

$(foreach goal,$(filter install-%,$(MAKECMDGOALS)),\ 
    $(eval $(goal): $(patsubst install-%,%,$(goal)))) 


what = all 
depend: what = depend 
install install-%: what = install 

ifneq ($(share),) 
$(share): shared = yes 
endif 
ifneq ($(noshare),) 
$(noshare): shared = 
endif 


$(targets): mkfile = $(if $(wildcard [email protected]/Makefile),,-f 
$(srcdir)/default.rules) 

$(targets): force 
    @$(MAKE) $(mkfile) -C [email protected] $(what) [email protected] 

force: 


indent: 
    find . -type f -name "*.[ch]" -print -exec $(INDENT) {} \; 

clean: 
    rm -f $(foreach exe, $(EXEDIRS), ./$(exe)/$(exe)) nohup.out 
    rm -f `find . \(-name "*.[oa]" -o -name "*.[ls]o" \ 
     -o -name core -o -name "core.[0-9]*" -o -name a.out \) -print` 

distclean: clean 
    rm -f `find $(foreach dir, $(subdirs), $(dir)/.) \ 
     \(-name "*.[oa]" -o -name "*.[ls]o" \ 
     -o -name core -o -name "core.[0-9]*" -o -name a.out \ 
     -o -name .depend -o -name "_*" -o -name ".cross:*" \) \ 
     -print` 


libclean: 
    rm -f $(foreach lib, $(LIBDIRS), ./$(lib)/$(lib).a ./$(lib)/$(lib).so) 


# Rules to make whole-distributive operations. 
# 

STORE_DIR = $(HOME)/pub 

release release1 release2 release3: 
    @./chvers.sh [email protected] 
    @$(MAKE) store 

store: distclean 
    @./store.sh $(NAME) $(STORE_DIR) 
+1

수정 메이크과 내가 지금까지 발견 한 작은 것들과는 달리, –

+0

@OleksandrKravchuk Makefile을 나를 위해 조금 너무 복잡 출력 바이너리 이름을 변경합니다. 메이크 규칙은 내가 언급 한 여러 파일에 걸쳐있다. 나는 Makefile 코드를 포함하도록 게시물을 편집했다. – Imran

답변

0

나는 도구의 프로그래머에게 편지를 썼다. 그의 해결책은 나를 위해 일했다. 여기에 :

서브 디렉토리 "traceroute"의 이름을 "mytrace"와 같은 다른 이름으로 바꿉니다. IOW, "include, libsupp, traceroute"대신 "include, libsupp, mytrace"가 있습니다. 당신이 등 변경된 이름의 타르볼을 만들 계획이라면

는 또한, 당신이 Make.defines 파일에 "NAME = 경로 추적"을 "NAME = MYTRACE을"의 이름을 변경해야 할 것으로 보인다. 안부, 드미트리 Butskoy