CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 6 of 6
  1. #1
    Join Date
    Nov 2003
    Posts
    53

    Question makefile output directory

    I'm working with Borland C++ 4.02 compiler / IDE for a 16-bit dos project and it's been a while since I've done a makefile.

    Borland has generated a makefile for me, but I was hoping it was possible to change the directory where the obj files and executable are written to. Anyone know how?

    Thanks,
    Eric

    Code:
    #
    #
    # Borland C++ IDE generated makefile
    #
    .AUTODEPEND
    
    
    #
    # Borland C++ tools
    #
    IMPLIB  = Implib
    BCCDOS  = Bcc +BccDos.cfg 
    TLINK   = TLink
    TLIB    = TLib
    TASM    = Tasm
    #
    # IDE macros
    #
    
    
    #
    # Options
    #
    IDE_LFLAGSDOS =  -LC:\BC4\LIB
    IDE_BFLAGS = 
    LLATDOS_mcmdexe =  -c -Tde
    RLATDOS_mcmdexe = 
    BLATDOS_mcmdexe = 
    CNIEAT_mcmdexe = -IC:\BC4\INCLUDE -D
    LNIEAT_mcmdexe = -m
    LEAT_mcmdexe = $(LLATDOS_mcmdexe)
    REAT_mcmdexe = $(RLATDOS_mcmdexe)
    BEAT_mcmdexe = $(BLATDOS_mcmdexe)
    
    #
    # Dependency List
    #
    Dep_mcm = \
       mcm.exe
    
    mcm : BccDos.cfg $(Dep_mcm)
      echo MakeNode 
    
    Dep_mcmdexe = \
       squeue.obj\
       ddu_ser.obj\
       diag.obj\
       rxrout.obj\
       vfd_ser.obj\
       common.obj\
       control.obj\
       ddu.obj\
       io.obj\
       mcm.obj\
       menus.obj\
       pccomms.obj\
       pqueue.obj\
       table.obj\
       vfd_init.obj
    
    mcm.exe : $(Dep_mcmdexe)
      $(TLINK)   @&&|
     /v $(IDE_LFLAGSDOS) $(LEAT_mcmdexe) $(LNIEAT_mcmdexe) +
    C:\BC4\LIB\c0l.obj+
    squeue.obj+
    ddu_ser.obj+
    diag.obj+
    rxrout.obj+
    vfd_ser.obj+
    common.obj+
    control.obj+
    ddu.obj+
    io.obj+
    mcm.obj+
    menus.obj+
    pccomms.obj+
    pqueue.obj+
    table.obj+
    vfd_init.obj
    $<,$*
    C:\BC4\LIB\bidsl.lib+
    C:\BC4\LIB\emu.lib+
    C:\BC4\LIB\mathl.lib+
    C:\BC4\LIB\cl.lib
    
    |
    
    squeue.obj :  squeue.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ squeue.cpp
    |
    
    ddu_ser.obj :  ddu_ser.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ ddu_ser.cpp
    |
    
    diag.obj :  diag.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ diag.cpp
    |
    
    rxrout.obj :  rxrout.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ rxrout.cpp
    |
    
    vfd_ser.obj :  vfd_ser.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ vfd_ser.cpp
    |
    
    common.obj :  common.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ common.cpp
    |
    
    control.obj :  control.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ control.cpp
    |
    
    ddu.obj :  ddu.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ ddu.cpp
    |
    
    io.obj :  io.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ io.cpp
    |
    
    mcm.obj :  mcm.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ mcm.cpp
    |
    
    menus.obj :  menus.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ menus.cpp
    |
    
    pccomms.obj :  pccomms.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ pccomms.cpp
    |
    
    pqueue.obj :  pqueue.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ pqueue.cpp
    |
    
    table.obj :  table.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ table.cpp
    |
    
    vfd_init.obj :  vfd_init.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$@ vfd_init.cpp
    |
    
    # Compiler configuration file
    BccDos.cfg : 
       Copy &&|
    -W-
    -R
    -v
    -vi
    -H
    -H=mcm.csm
    -ml
    -f
    -Ot
    | $@

  2. #2
    Join Date
    Feb 2005
    Location
    Normandy in France
    Posts
    4,590

    Re: makefile output directory

    You can replace "-o$@" with "-o$(DESTINATION_PATH)\$." for each rule of object file.
    And, for the linking command, replace "$*" with "$(DESTINATION_PATH)\$."
    You must, of course, define the DESTINATION_PATH macro in the makefile.

    Something like that:
    Code:
    #
    #
    # Borland C++ IDE generated makefile
    #
    .AUTODEPEND
    
    
    #
    # Borland C++ tools
    #
    IMPLIB  = Implib
    BCCDOS  = Bcc +BccDos.cfg 
    TLINK   = TLink
    TLIB    = TLib
    TASM    = Tasm
    #
    # IDE macros
    #
    
    
    #
    # Options
    #
    IDE_LFLAGSDOS =  -LC:\BC4\LIB
    IDE_BFLAGS = 
    LLATDOS_mcmdexe =  -c -Tde
    RLATDOS_mcmdexe = 
    BLATDOS_mcmdexe = 
    CNIEAT_mcmdexe = -IC:\BC4\INCLUDE -D
    LNIEAT_mcmdexe = -m
    LEAT_mcmdexe = $(LLATDOS_mcmdexe)
    REAT_mcmdexe = $(RLATDOS_mcmdexe)
    BEAT_mcmdexe = $(BLATDOS_mcmdexe)
    DESTINATION_PATH= c:\yourpath\here
    
    #
    # Dependency List
    #
    Dep_mcm = \
       mcm.exe
    
    mcm : BccDos.cfg $(Dep_mcm)
      echo MakeNode 
    
    Dep_mcmdexe = \
       squeue.obj\
       ddu_ser.obj\
       diag.obj\
       rxrout.obj\
       vfd_ser.obj\
       common.obj\
       control.obj\
       ddu.obj\
       io.obj\
       mcm.obj\
       menus.obj\
       pccomms.obj\
       pqueue.obj\
       table.obj\
       vfd_init.obj
    
    mcm.exe : $(Dep_mcmdexe)
      $(TLINK)   @&&|
     /v $(IDE_LFLAGSDOS) $(LEAT_mcmdexe) $(LNIEAT_mcmdexe) +
    C:\BC4\LIB\c0l.obj+
    squeue.obj+
    ddu_ser.obj+
    diag.obj+
    rxrout.obj+
    vfd_ser.obj+
    common.obj+
    control.obj+
    ddu.obj+
    io.obj+
    mcm.obj+
    menus.obj+
    pccomms.obj+
    pqueue.obj+
    table.obj+
    vfd_init.obj
    $<,$(DESTINATION_PATH)\$.
    C:\BC4\LIB\bidsl.lib+
    C:\BC4\LIB\emu.lib+
    C:\BC4\LIB\mathl.lib+
    C:\BC4\LIB\cl.lib
    
    |
    
    squeue.obj :  squeue.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. squeue.cpp
    |
    
    ddu_ser.obj :  ddu_ser.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. ddu_ser.cpp
    |
    
    diag.obj :  diag.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. diag.cpp
    |
    
    rxrout.obj :  rxrout.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. rxrout.cpp
    |
    
    vfd_ser.obj :  vfd_ser.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. vfd_ser.cpp
    |
    
    common.obj :  common.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. common.cpp
    |
    
    control.obj :  control.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. control.cpp
    |
    
    ddu.obj :  ddu.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. ddu.cpp
    |
    
    io.obj :  io.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. io.cpp
    |
    
    mcm.obj :  mcm.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. mcm.cpp
    |
    
    menus.obj :  menus.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. menus.cpp
    |
    
    pccomms.obj :  pccomms.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. pccomms.cpp
    |
    
    pqueue.obj :  pqueue.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. pqueue.cpp
    |
    
    table.obj :  table.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. table.cpp
    |
    
    vfd_init.obj :  vfd_init.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_mcmdexe) $(CNIEAT_mcmdexe) -o$(DESTINATION_PATH)\$. vfd_init.cpp
    |
    
    # Compiler configuration file
    BccDos.cfg : 
       Copy &&|
    -W-
    -R
    -v
    -vi
    -H
    -H=mcm.csm
    -ml
    -f
    -Ot
    | $@
    It could be good to define an implicit rule .cpp.obj
    "inherit to be reused by code that uses the base class, not to reuse base class code", Sutter and Alexandrescu, C++ Coding Standards.
    Club of lovers of the C++ typecasts cute syntax: Only recorded member.

    Out of memory happens! Handle it properly!
    Say no to g_new()!

  3. #3
    Join Date
    Nov 2003
    Posts
    53

    Re: makefile output directory

    It worked for the most part.
    The linker is bombing out now because the obj files are in the new directory, I believe. It is also not detecting that the obj files exist... keeps rebuilding all of them.
    What do I need to change?

    Thanks,
    Eric

    Code:
    MAKE Version 3.7  Copyright (c) 1987, 1994 Borland International
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    squeue.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    ddu_ser.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    diag.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    rxrout.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    vfd_ser.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    common.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    system.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    control.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    ddu.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    io.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    mcm.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    menus.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    pccomms.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    pqueue.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    table.cpp:
    Loaded pre-compiled headers.
    Borland C++ Version 4.02 Copyright (c) 1994 Borland International
    vfd_init.cpp:
    Loaded pre-compiled headers.
    Turbo Link  Version 6.10 Copyright (c) 1992, 1993, 1994 Borland International
    Fatal: Invalid map filename: c:\projects\oldenb~1\source\mcm\releas~1\mcm.exe
    
    ** error 2 ** deleting mcm.exe

  4. #4
    Join Date
    Aug 2005
    Posts
    132

    Re: makefile output directory

    I haven't worked with BCB 4.x but the later versions allow you to change the immediate output in the IDE. Modifying the generated makefile may not be a good idea.

    Is there no setting to define the location of the immediate output in BCB 4?

  5. #5
    Join Date
    Nov 2003
    Posts
    53

    Thumbs up Re: makefile output directory

    You were right... I thought I looked; Guess I didn't look hard enough.
    Here is the resultant makefile that borland generated.

    Thanks!
    Eric

    Code:
    #
    # Borland C++ IDE generated makefile
    #
    .AUTODEPEND
    
    
    #
    # Borland C++ tools
    #
    IMPLIB  = Implib
    BCCDOS  = Bcc +BccDos.cfg 
    TLINK   = TLink
    TLIB    = TLib
    TASM    = Tasm
    #
    # IDE macros
    #
    
    
    #
    # Options
    #
    IDE_LFLAGSDOS =  -LC:\BC4\LIB
    IDE_BFLAGS = 
    LLATDOS_OUTPUT16bmcmdexe =  -c -Tde
    RLATDOS_OUTPUT16bmcmdexe = 
    BLATDOS_OUTPUT16bmcmdexe = 
    CNIEAT_OUTPUT16bmcmdexe = -IC:\BC4\INCLUDE -D
    LNIEAT_OUTPUT16bmcmdexe = -m
    LEAT_OUTPUT16bmcmdexe = $(LLATDOS_OUTPUT16bmcmdexe)
    REAT_OUTPUT16bmcmdexe = $(RLATDOS_OUTPUT16bmcmdexe)
    BEAT_OUTPUT16bmcmdexe = $(BLATDOS_OUTPUT16bmcmdexe)
    
    #
    # Dependency List
    #
    Dep_mcm = \
       OUTPUT16\mcm.exe
    
    mcm : BccDos.cfg $(Dep_mcm)
      echo MakeNode 
    
    Dep_OUTPUT16bmcmdexe = \
       OUTPUT16\system.obj\
       OUTPUT16\squeue.obj\
       OUTPUT16\ddu_ser.obj\
       OUTPUT16\diag.obj\
       OUTPUT16\rxrout.obj\
       OUTPUT16\vfd_ser.obj\
       OUTPUT16\common.obj\
       OUTPUT16\control.obj\
       OUTPUT16\ddu.obj\
       OUTPUT16\io.obj\
       OUTPUT16\mcm.obj\
       OUTPUT16\menus.obj\
       OUTPUT16\pccomms.obj\
       OUTPUT16\pqueue.obj\
       OUTPUT16\table.obj\
       OUTPUT16\vfd_init.obj
    
    OUTPUT16\mcm.exe : $(Dep_OUTPUT16bmcmdexe)
      $(TLINK)   @&&|
     /v $(IDE_LFLAGSDOS) $(LEAT_OUTPUT16bmcmdexe) $(LNIEAT_OUTPUT16bmcmdexe) +
    C:\BC4\LIB\c0l.obj+
    OUTPUT16\system.obj+
    OUTPUT16\squeue.obj+
    OUTPUT16\ddu_ser.obj+
    OUTPUT16\diag.obj+
    OUTPUT16\rxrout.obj+
    OUTPUT16\vfd_ser.obj+
    OUTPUT16\common.obj+
    OUTPUT16\control.obj+
    OUTPUT16\ddu.obj+
    OUTPUT16\io.obj+
    OUTPUT16\mcm.obj+
    OUTPUT16\menus.obj+
    OUTPUT16\pccomms.obj+
    OUTPUT16\pqueue.obj+
    OUTPUT16\table.obj+
    OUTPUT16\vfd_init.obj
    $<,$*
    C:\BC4\LIB\bidsl.lib+
    C:\BC4\LIB\emu.lib+
    C:\BC4\LIB\mathl.lib+
    C:\BC4\LIB\cl.lib
    
    |
    
    OUTPUT16\system.obj :  system.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ system.cpp
    |
    
    OUTPUT16\squeue.obj :  squeue.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ squeue.cpp
    |
    
    OUTPUT16\ddu_ser.obj :  ddu_ser.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ ddu_ser.cpp
    |
    
    OUTPUT16\diag.obj :  diag.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ diag.cpp
    |
    
    OUTPUT16\rxrout.obj :  rxrout.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ rxrout.cpp
    |
    
    OUTPUT16\vfd_ser.obj :  vfd_ser.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ vfd_ser.cpp
    |
    
    OUTPUT16\common.obj :  common.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ common.cpp
    |
    
    OUTPUT16\control.obj :  control.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ control.cpp
    |
    
    OUTPUT16\ddu.obj :  ddu.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ ddu.cpp
    |
    
    OUTPUT16\io.obj :  io.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ io.cpp
    |
    
    OUTPUT16\mcm.obj :  mcm.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ mcm.cpp
    |
    
    OUTPUT16\menus.obj :  menus.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ menus.cpp
    |
    
    OUTPUT16\pccomms.obj :  pccomms.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ pccomms.cpp
    |
    
    OUTPUT16\pqueue.obj :  pqueue.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ pqueue.cpp
    |
    
    OUTPUT16\table.obj :  table.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ table.cpp
    |
    
    OUTPUT16\vfd_init.obj :  vfd_init.cpp
      $(BCCDOS) -c @&&|
     $(CEAT_OUTPUT16bmcmdexe) $(CNIEAT_OUTPUT16bmcmdexe) -o$@ vfd_init.cpp
    |
    
    # Compiler configuration file
    BccDos.cfg : 
       Copy &&|
    -W-
    -R
    -v
    -vi
    -H
    -H=mcm.csm
    -ml
    -f
    -Ot
    | $@

  6. #6
    Join Date
    Aug 2005
    Posts
    132

    Re: makefile output directory

    Great,

    Glad it worked.

    Cheers

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured