Avatar billede conrad Nybegynder
28. november 2003 - 10:11 Der er 11 kommentarer og
1 løsning

hvorfor kommer ændringer i min .h fil ikke med?

Når jeg ændrer i en .h fil så kan jeg ikke få ændringerne til at "virke" før jeg ændrer i den cc fil som ændringerne påvirker.

Min makefile.in ser således ud (det er en jeg har arvet)#  Copyright (c) 1994, 1995, 1996
#     The Regents of the University of California.  All rights reserved.
#
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that: (1) source code distributions
#  retain the above copyright notice and this paragraph in its entirety, (2)
#  distributions including binary code include the above copyright notice and
#  this paragraph in its entirety in the documentation or other materials
#  provided with the distribution, and (3) all advertising materials mentioning
#  features or use of this software display the following acknowledgement:
#  ``This product includes software developed by the University of California,
#  Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
#  the University nor the names of its contributors may be used to endorse
#  or promote products derived from this software without specific prior
#  written permission.
#  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
# @(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/Makefile.in,v 1.218 2001/05/23 16:37:10 haldar Exp $ (LBL)

#
# Various configurable paths (remember to edit Makefile.in, not Makefile)
#

# Top level hierarchy
prefix    = @prefix@
# Pathname of directory to install the binary
BINDEST    = @prefix@/bin
# Pathname of directory to install the man page
MANDEST    = @prefix@/man

BLANK    = # make a blank space.  DO NOT add anything to this line

# The following will be redefined under Windows (see WIN32 lable below)
CC    = @CC@
CPP    = @CXX@
LINK    = $(CPP)
MKDEP    = ./conf/mkdep
TCLSH    = @V_TCLSH@
TCL2C    = @V_TCL2CPP@
AR    = ar rc $(BLANK)

RANLIB    = @V_RANLIB@
INSTALL    = @INSTALL@
LN    = ln
TEST    = test
RM    = rm -f
PERL    = @PERL@


CCOPT    = @V_CCOPT@
STATIC    = @V_STATIC@
LDFLAGS    = $(STATIC)
LDOUT    = -o $(BLANK)

DEFINE    = -DTCP_DELAY_BIND_ALL -DNO_TK -DNIXVECTOR @V_DEFINE@ @V_DEFINES@ @DEFS@

INCLUDES = \
    -I. @V_INCLUDE_X11@ \
    @V_INCLUDES@

LIB    = \
    @V_LIBS@ \
    @V_LIB_X11@ \
    @V_LIB@ \
    -lm @LIBS@
#    -L@libdir@ \

CFLAGS    = $(CCOPT) $(DEFINE)

# Explicitly define compilation rules since SunOS 4's make doesn't like gcc.
# Also, gcc does not remove the .o before forking 'as', which can be a
# problem if you don't own the file but can write to the directory.
.SUFFIXES: .cc    # $(.SUFFIXES)

.cc.o:
    @rm -f $@
    $(CPP) -c $(CFLAGS) $(INCLUDES) -o $@ $*.cc

.c.o:
    @rm -f $@
    $(CC) -c $(CFLAGS) $(INCLUDES) -o $@ $*.c


GEN_DIR    = gen/
LIB_DIR    = lib/
NS    = ns
NSX    = nsx
NSE    = nse

# To allow conf/makefile.win overwrite this macro
# We will set these two macros to empty in conf/makefile.win since VC6.0
# does not seem to support the STL in gcc 2.8 and up.
OBJ_STL = linkstate/ls.o linkstate/rtProtoLS.o
NS_TCL_LIB_STL = tcl/rtglib/ns-rtProtoLS.tcl

# WIN32: uncomment the following line to include specific make for VC++
# !include <conf/makefile.win>

OBJ_CC = \
    random.o rng.o ranvar.o misc.o timer-handler.o \
    scheduler.o object.o \
    packet.o ip.o route.o connector.o ttl.o \
    trace.o trace-ip.o \
    classifier.o classifier-addr.o classifier-hash.o classifier-virtual.o \
    classifier-mcast.o classifier-bst.o classifier-mpath.o replicator.o \
    classifier-mac.o classifier-port.o src_rtg/classifier-sr.o \
        src_rtg/sragent.o src_rtg/hdr_src.o ump.o \
    app.o telnet.o tcplib-telnet.o \
    trafgen.o traffictrace.o pareto.o expoo.o cbr_traffic.o \
    tbf.o resv.o sa.o saack.o \
    measuremod.o estimator.o adc.o ms-adc.o timewindow-est.o acto-adc.o \
        pointsample-est.o salink.o actp-adc.o hb-adc.o expavg-est.o\
    param-adc.o null-estimator.o \
    adaptive-receiver.o vatrcvr.o consrcvr.o \
    agent.o message.o udp.o session-rtp.o rtp.o rtcp.o ivs.o \
    tcp.o tcp-sink.o tcp-reno.o tcp-newreno.o \
    tcp-vegas.o tcp-rbp.o tcp-full.o \
    baytcp/tcp-full-bay.o baytcp/ftpc.o baytcp/ftps.o \
    scoreboard.o tcp-sack1.o tcp-fack.o \
    tcp-asym.o tcp-asym-sink.o tcp-fs.o tcp-asym-fs.o \
    tcp-int.o chost.o tcp-session.o nilist.o \
    integrator.o queue-monitor.o flowmon.o loss-monitor.o \
    queue.o drop-tail.o simple-intserv-sched.o red.o \
    semantic-packetqueue.o semantic-red.o ack-recons.o \
    sfq.o fq.o drr.o cbq.o \
    hackloss.o errmodel.o fec.o\
    delay.o snoop.o \
    gaf/gaf.o \
    dynalink.o rtProtoDV.o net-interface.o \
    ctrMcast.o mcast_ctrl.o srm.o \
    sessionhelper.o delaymodel.o srm-ssm.o \
    srm-topo.o \
    mftp.o mftp_snd.o mftp_rcv.o codeword.o \
    alloc-address.o address.o \
    $(LIB_DIR)int.Vec.o $(LIB_DIR)int.RVec.o \
    $(LIB_DIR)dmalloc_support.o \
    webcache/http.o webcache/tcp-simple.o webcache/pagepool.o \
    webcache/inval-agent.o webcache/tcpapp.o webcache/http-aux.o \
    webcache/mcache.o webcache/webtraf.o \
    realaudio/realaudio.o \
    lanRouter.o filter.o pkt-counter.o \
    Decapsulator.o Encapsulator.o encap.o \
    channel.o mac.o ll.o mac-802_11.o mac-802_3.o mac-tdma.o \
    mip.o mip-reg.o gridkeeper.o \
    propagation.o tworayground.o antenna.o omni-antenna.o \
    shadowing.o bi-connector.o node.o mobilenode.o \
    arp.o god.o dem.o topography.o modulation.o priqueue.o \
    phy.o wired-phy.o wireless-phy.o \
    mac-timers.o cmu-trace.o varp.o \
    dsdv/dsdv.o dsdv/rtable.o rtqueue.o rttable.o \
    imep/imep.o imep/dest_queue.o imep/imep_api.o \
    imep/imep_rt.o imep/rxmit_queue.o imep/imep_timers.o \
    imep/imep_util.o imep/imep_io.o \
    tora/tora.o tora/tora_api.o tora/tora_dest.o tora/tora_io.o \
    tora/tora_logs.o tora/tora_neighbor.o \
    dsr/dsragent.o dsr/hdr_sr.o dsr/mobicache.o dsr/path.o \
    dsr/requesttable.o dsr/routecache.o \
    dsr/trustformation.o dsr/trustmanagement.o dsr/routeselection.o \
    dsr/TrustManager.o dsr/TrustValue.o dsr/TrustFormater.o dsr/TrustUpdater.o dsr/ACKMonitor.o dsr/RouteSelector.o \
    aodv/aodv_logs.o aodv/aodv.o \
    ns-process.o \
    satgeometry.o sathandoff.o satlink.o satnode.o \
    satposition.o satroute.o sattrace.o \
    rap/raplist.o rap/rap.o rap/media-app.o rap/utilities.o \
    fsm.o tcp-abs.o \
    diffusion/diffusion.o diffusion/diff_rate.o diffusion/diff_prob.o \
    diffusion/diff_sink.o diffusion/flooding.o diffusion/omni_mcast.o \
    diffusion/hash_table.o diffusion/routing_table.o diffusion/iflist.o \
    tfrc.o tfrc-sink.o energy-model.o ping.o tcp-rfc793edu.o \
    rio.o semantic-rio.o tcp-sack-rh.o scoreboard-rh.o \
    plm/loss-monitor-plm.o plm/cbr-traffic-PP.o \
    linkstate/hdr-ls.o \
    mpls/classifier-addr-mpls.o mpls/ldp.o mpls/mpls-module.o \
    rtmodule.o classifier-hier.o addr-params.o \
        nix/hdr_nv.o nix/classifier-nix.o \
        nix/nixnode.o \
        routealgo/rnode.o \
        routealgo/bfs.o \
        routealgo/rbitmap.o \
        routealgo/rlookup.o \
        routealgo/routealgo.o \
        nix/nixvec.o \
    nix/nixroute.o \
    diffserv/dsred.o diffserv/dsEdge.o diffserv/dsCore.o diffserv/dsPolicy.o diffserv/dsredq.o \
    red-pd.o \
    pushback/rate-limit.o pushback/rate-limit-strategy.o \
    pushback/ident-tree.o pushback/agg-spec.o \
    pushback/logging-data-struct.o pushback/rate-estimator.o \
    pushback/pushback-queue.o pushback/pushback.o \
    parentnode.o \
    basetrace.o \
    simulator.o \
    @V_STLOBJ@


# don't allow comments to follow continuation lines

#  mac-csma.o mac-multihop.o\
#    sensor-nets/landmark.o mac-simple-wireless.o \
#    sensor-nets/tags.o sensor-nets/sensor-query.o \
#    sensor-nets/flood-agent.o \

# what was here before is now in emulate/
OBJ_C =

OBJ_COMPAT = $(OBJ_GETOPT) win32.o
#XXX compat/win32x.o compat/tkConsole.o

OBJ_EMULATE_CC = \
    emulate/net-ip.o \
    emulate/net.o \
    emulate/tap.o \
    emulate/ether.o \
    emulate/internet.o \
    emulate/ping_responder.o \
    emulate/arp.o \
    emulate/icmp.o \
    emulate/net-pcap.o \
    emulate/nat.o  \
    emulate/iptap.o \
    emulate/tcptap.o

OBJ_EMULATE_C = \
    emulate/inet.o

OBJ_GEN = $(GEN_DIR)version.o $(GEN_DIR)ns_tcl.o $(GEN_DIR)ptypes.o

SRC =    $(OBJ_C:.o=.c) $(OBJ_CC:.o=.cc) \
    $(OBJ_EMULATE_C:.o=.c) $(OBJ_EMULATE_CC:.o=.cc) \
    tclAppInit.cc tkAppInit.cc

OBJ =    $(OBJ_C) $(OBJ_CC) $(OBJ_GEN) $(OBJ_COMPAT)

CLEANFILES = ns nse nsx ns.dyn $(OBJ) $(OBJ_EMULATE_CC) \
    $(OBJ_EMULATE_C) tclAppInit.o \
    $(GEN_DIR)* $(NS).core core core.$(NS) core.$(NSX) core.$(NSE) \
    ptypes2tcl ptypes2tcl.o

SUBDIRS=\
    indep-utils/cmu-scen-gen/setdest \
    indep-utils/webtrace-conv/dec \
    indep-utils/webtrace-conv/epa \
    indep-utils/webtrace-conv/nlanr \
    indep-utils/webtrace-conv/ucb

all: $(NS) all-recursive

all-recursive:
    for i in $(SUBDIRS); do ( cd $$i; $(MAKE) all; ) done

$(NS): $(OBJ) tclAppInit.o Makefile
    $(LINK) $(LDFLAGS) $(LDOUT)$@ \
        tclAppInit.o $(OBJ) $(LIB)

Makefile: Makefile.in
    @echo "Makefile.in is newer than Makefile."
    @echo "You need to re-run configure."
    false

$(NSE): $(OBJ) tclAppInit.o $(OBJ_EMULATE_CC) $(OBJ_EMULATE_C)
    $(LINK) $(LDFLAGS) $(LDOUT)$@ \
        tclAppInit.o $(OBJ) \
        $(OBJ_EMULATE_CC) $(OBJ_EMULATE_C)  $(LIB) -lpcap

ns.dyn: $(OBJ) tclAppInit.o
    $(LINK) $(LDFLAGS) -o $@ \
        tclAppInit.o $(OBJ) $(LIB)

PURIFY    = purify -cache-dir=/tmp
ns-pure: $(OBJ) tclAppInit.o
    $(PURIFY) $(LINK) $(LDFLAGS) -o $@ \
        tclAppInit.o $(OBJ) $(LIB)

NS_TCL_LIB = \
    tcl/lib/ns-compat.tcl \
    tcl/lib/ns-default.tcl \
    tcl/lib/ns-errmodel.tcl \
    tcl/lib/ns-lib.tcl \
    tcl/lib/ns-link.tcl \
    tcl/lib/ns-mobilenode.tcl \
    tcl/lib/ns-sat.tcl \
    tcl/lib/ns-cmutrace.tcl \
    tcl/lib/ns-node.tcl \
    tcl/lib/ns-rtmodule.tcl \
    tcl/lib/ns-hiernode.tcl \
    tcl/lib/ns-packet.tcl \
    tcl/lib/ns-queue.tcl \
    tcl/lib/ns-source.tcl \
    tcl/lib/ns-nam.tcl \
    tcl/lib/ns-trace.tcl \
    tcl/lib/ns-agent.tcl \
    tcl/lib/ns-random.tcl \
    tcl/lib/ns-namsupp.tcl \
    tcl/lib/ns-address.tcl \
    tcl/lib/ns-intserv.tcl \
    tcl/lib/ns-autoconf.tcl \
    tcl/rtp/session-rtp.tcl \
    tcl/lib/ns-mip.tcl \
    tcl/rtglib/dynamics.tcl \
    tcl/rtglib/route-proto.tcl \
    tcl/rtglib/algo-route-proto.tcl \
    tcl/rtglib/ns-rtProtoLS.tcl \
        tcl/interface/ns-iface.tcl \
    tcl/mcast/BST.tcl \
        tcl/mcast/ns-mcast.tcl \
        tcl/mcast/McastProto.tcl \
        tcl/mcast/DM.tcl \
    tcl/mcast/srm.tcl \
    tcl/mcast/srm-adaptive.tcl \
    tcl/mcast/srm-ssm.tcl \
    tcl/mcast/timer.tcl \
    tcl/mcast/McastMonitor.tcl \
    tcl/mcast/mftp_snd.tcl \
    tcl/mcast/mftp_rcv.tcl \
    tcl/mcast/mftp_rcv_stat.tcl \
    tcl/mobility/dsdv.tcl \
    tcl/mobility/dsr.tcl \
        tcl/ctr-mcast/CtrMcast.tcl \
        tcl/ctr-mcast/CtrMcastComp.tcl \
        tcl/ctr-mcast/CtrRPComp.tcl \
    tcl/rlm/rlm.tcl \
    tcl/rlm/rlm-ns.tcl \
    tcl/session/session.tcl \
    tcl/lib/ns-route.tcl \
    tcl/emulate/ns-emulate.tcl \
    tcl/lan/vlan.tcl \
    tcl/lan/abslan.tcl \
    tcl/lan/ns-ll.tcl \
    tcl/lan/ns-mac.tcl \
    tcl/webcache/http-agent.tcl \
    tcl/webcache/http-server.tcl \
    tcl/webcache/http-cache.tcl \
    tcl/webcache/http-mcache.tcl \
    tcl/webcache/webtraf.tcl \
    tcl/plm/plm.tcl \
    tcl/plm/plm-ns.tcl \
    tcl/plm/plm-topo.tcl \
    tcl/mpls/ns-mpls-classifier.tcl \
    tcl/mpls/ns-mpls-ldpagent.tcl \
    tcl/mpls/ns-mpls-node.tcl \
    tcl/mpls/ns-mpls-simulator.tcl \
    tcl/lib/ns-pushback.tcl \
    tcl/lib/ns-srcrt.tcl \
    @V_NS_TCL_LIB_STL@

$(GEN_DIR)ns_tcl.cc: $(NS_TCL_LIB)
    $(TCLSH) bin/tcl-expand.tcl tcl/lib/ns-lib.tcl @V_NS_TCL_LIB_STL@ | $(TCL2C) et_ns_lib > $@

$(GEN_DIR)version.c: VERSION
    $(RM) $@
    $(TCLSH) bin/string2c.tcl version_string < VERSION > $@

$(GEN_DIR)ptypes.cc: ptypes2tcl packet.h
    ./ptypes2tcl > $@

ptypes2tcl: ptypes2tcl.o
    $(LINK) $(LDFLAGS) $(LDOUT)$@ ptypes2tcl.o

ptypes2tcl.o: ptypes2tcl.cc packet.h

install: force install-ns install-man install-recursive

install-ns: force
    $(INSTALL) -m 555 -o bin -g bin ns $(DESTDIR)$(BINDEST)

install-man: force
    $(INSTALL) -m 444 -o bin -g bin ns.1 $(DESTDIR)$(MANDEST)/man1

install-recursive: force
    for i in $(SUBDIRS); do cd $$i; $(MAKE) install; done

clean:
    $(RM) $(CLEANFILES)

AUTOCONF_GEN = tcl/lib/ns-autoconf.tcl
distclean:
    $(RM) $(CLEANFILES) Makefile config.cache config.log config.status \
        gnuc.h os-proto.h $(AUTOCONF_GEN)

tags:    force
    ctags -wtd *.cc *.h webcache/*.cc webcache/*.h dsdv/*.cc dsdv/*.h \
    dsr/*.cc dsr/*.h webcache/*.cc webcache/*.h lib/*.cc lib/*.h \
    ../Tcl/*.cc ../Tcl/*.h

TAGS:    force
    etags *.cc *.h webcache/*.cc webcache/*.h dsdv/*.cc dsdv/*.h \
    dsr/*.cc dsr/*.h webcache/*.cc webcache/*.h lib/*.cc lib/*.h \
    ../Tcl/*.cc ../Tcl/*.h

tcl/lib/TAGS:    force
    ( \
        cd tcl/lib; \
        $(TCLSH) ../../bin/tcl-expand.tcl ns-lib.tcl | grep '^### tcl-expand.tcl: begin' | awk '{print $$5}' >.tcl_files; \
        etags --lang=none -r '/^[ \t]*proc[ \t]+\([^ \t]+\)/\1/' `cat .tcl_files`; \
        etags --append --lang=none -r '/^\([A-Z][^ \t]+\)[ \t]+\(instproc\|proc\)[ \t]+\([^ \t]+\)[ \t]+/\1::\3/' `cat .tcl_files`; \
    )

depend: $(SRC)
    $(MKDEP) $(CFLAGS) $(INCLUDES) $(SRC)

srctar:
    @cwd=`pwd` ; dir=`basename $$cwd` ; \
        name=ns-`cat VERSION | tr A-Z a-z` ; \
        tar=ns-src-`cat VERSION`.tar.gz ; \
        list="" ; \
        for i in `cat FILES` ; do list="$$list $$name/$$i" ; done; \
        echo \
        "(rm -f $$tar; cd .. ; ln -s $$dir $$name)" ; \
        (rm -f $$tar; cd .. ; ln -s $$dir $$name) ; \
        echo \
        "(cd .. ; tar cfh $$tar [lots of files])" ; \
        (cd .. ; tar cfh - $$list) | gzip -c > $$tar ; \
        echo \
        "rm ../$$name; chmod 444 $$tar" ;  \
        rm ../$$name; chmod 444 $$tar

force:

test:    force
    ./validate

# Create makefile.vc for Win32 development by replacing:
# "# !include ..."     ->     "!include ..."
makefile.vc:    Makefile.in
    $(PERL) bin/gen-vcmake.pl < Makefile.in > makefile.vc
#    $(PERL) -pe 's/^# (\!include)/\!include/o' < Makefile.in > makefile.vc

og der en .h fil i dir /dsr der er problemet
Avatar billede conrad Nybegynder
28. november 2003 - 10:13 #1
og jeg kører på Linux dvs windows koden kan skippes
Avatar billede arne_v Ekspert
28. november 2003 - 10:27 #2
Så skal .h filerne vel anbringes på højre side af en dependency.

Eller du skal være doven og force en rebuild af alt.
Avatar billede conrad Nybegynder
28. november 2003 - 10:29 #3
jeg er ikke så skrap til makefiler så kan du uddybe dependency lidt ?
Avatar billede arne_v Ekspert
28. november 2003 - 10:54 #4
Fra din makefile:

ptypes2tcl.o: ptypes2tcl.cc packet.h


Den vil gøre at ptypes2tcl.cc vil blive recompile hvis du retter i packet.h !
Avatar billede inter Nybegynder
28. november 2003 - 11:12 #5
bare lav en matrix.h... det r0x!
Avatar billede segmose Nybegynder
28. november 2003 - 11:25 #6
prøv

man mkdep
Avatar billede conrad Nybegynder
28. november 2003 - 12:50 #7
de filer der skal være afhængige er

dsr/requesttable.o dsr/routecache.o \
    dsr/trustformation.o dsr/trustmanagement.o dsr/routeselection.o \
    dsr/TrustManager.o dsr/TrustValue.o dsr/TrustFormater.o dsr/TrustUpdater.o dsr/ACKMonitor.o dsr/RouteSelector.o \

men jeg kan altså ikke helt overskue hvor jeg skal specifice XX.o : XX.cc Myconstants.h ?
Avatar billede arne_v Ekspert
28. november 2003 - 12:55 #8
Anywhere.

Mne hvorfor ikke anbringe dem lige under den linie jeg citerede.
Avatar billede conrad Nybegynder
28. november 2003 - 13:45 #9
lækkert - det spiller nu - mange tak (læg et svar)
Avatar billede segmose Nybegynder
28. november 2003 - 13:53 #10
conrad:

XX.o : XX.cc Myconstants.h

betyder (re-)compileringen af XX.o er afhængig af at XX.cc eller Myconstants.h er ændret.

Dette løser dog ikke det generelle problem, hvis du skulle lave dette for alle dine .o eller .cc filer kommer du ud for en masse tasteri, der findes sikkert en metode til gcc til at den selv laver/bruger auto-dependcy.
Avatar billede conrad Nybegynder
28. november 2003 - 14:23 #11
segmose >> tro ikke at jeg ikke selv havde tænkt den tanke da jeg havde skrevet linie nr 10 :). Men da jeg sidder under et stort tidspres (skoleopgave) vurderer jeg at det at bruge tid på en optimering i en makefile ikke er rentabelt frem for en forbedring i rapport - men jeg giver dig selvfølgelig ret
Avatar billede arne_v Ekspert
28. november 2003 - 15:12 #12
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester