저의 석사 학위 논문에서 다중 경로 네트워크 용 수식을 테스트하고 평가할 수있는 도구를 개발하고 있습니다.사용자 지정 도구에서 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)
수정 메이크과 내가 지금까지 발견 한 작은 것들과는 달리, –
@OleksandrKravchuk Makefile을 나를 위해 조금 너무 복잡 출력 바이너리 이름을 변경합니다. 메이크 규칙은 내가 언급 한 여러 파일에 걸쳐있다. 나는 Makefile 코드를 포함하도록 게시물을 편집했다. – Imran