在我的硕士论文中,我正在开发一个工具来测试和评估多径网络的公式。
我将使用traceroute工具通过传递给它-s标志src ip和dst ip来跟踪两个多宿主主机之间的网络。我有多个源和目标IP。所以traceroute将被执行多次。
我不擅长编译。从https://sourceforge.net/projects/traceroute/files/traceroute/网站下载的traceroute-2.1.0代码包含以下“make”相关文件。
生成文件
品牌定义
制定规则
默认规则
我已经将我的更改应用到traceroute.c中的代码,我可以通过“make”和“make install”正确编译它。但这些更改是对系统的traceroute工具所做的(显然)。
我想要实现的是,用一个新的名字命名它,例如“mytrace”而不是“traceroute”。所以它不会与traceroute工具冲突,我可以同时使用这两个工具。在命令行中用“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 $@/Makefile),,-f
$(srcdir)/default.rules)

$(targets): force
    @$(MAKE) $(mkfile) -C $@ $(what) TARGET=$@

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 $@
    @$(MAKE) store

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

最佳答案

我写信给这个工具的程序员,他的解决方案对我有效。这里是:
只需将子目录“traceroute”重命名为另一个名称,比如“mytrace”。
听着,你会得到“include,libsupp,mytrace”而不是“include,libsupp,traceroute”。
此外,如果您计划使用更改的名称等创建tarball,则似乎必须在make.defines文件中将“name=traceroute”重命名为“name=mytrace”。
谨致问候,
德米特里·布茨科伊

10-08 07:11