In most Unix environments, the "cc" program has a switch to build either a 
32-bit or a 64-bit environment,
For example "gcc -m32 ..." or "gcc -m64 ...".

However, in Windoze, there are separate programs that must be invoked:

        32 bit: C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.exe
        64 bit: C:\Program Files\Microsoft Visual Studio 
9.0\VC\bin\x86_amd64\cl.exe

The result of this is that rather than depending on finding "cl.exe" in the 
path, you have to specify the full path in your command line.  The problem here 
is that the full path contains spaces, which really messes up gmake.

Now, Windoze has the ability to "shorten" a path, thus "Program Files" becomes 
"Micros~1" or something similar, which has no spaces in it.  Unfortunately, you 
cannot hard-code this short path in a makefile, since how the actual short name 
is created depends on what other files/directories are in that directory.

My suggestion:

Add a new function "shortname", which in Windoze creates a short name of the 
given name, and in all other environments just copies the name.  Thus, I can 
then do the following:

        VSINSTALLDIR := $(strip $(shortname C:/Program Files/Microsoft Visual 
Studio 9.0/VC/bin))

And then just invoke the command "$(VSINSTALLDIR)/cl.exe".

The only changes would be in function.c.  Here is the code:

#if _WIN32
#include <windows.h>
#endif

.....

static char *
func_shortname (char *o, char **argv, const char *funcname)
{
  /* Expand the argument.  */
  const char *p3 = argv[0];
  const char *p2;
  PATH_VAR(path);
  int doneany=0;
  unsigned int len=0;

  while ((p2 = find_next_token (&p3, &len)) != 0)
    {
#if _WIN32
       len = GetShortPathName(p2, path, PATH_MAX);
#else
       strcpy(buf, p2);
       len = strlen(buf);
#endif
      o = variable_buffer_output (o, path, len);
      o = variable_buffer_output (o, " ", 1);
      doneany = 1;
    }

  if (doneany)
    /* Kill last space.  */
    --o;

  return o;
}

.....

static struct function_table_entry function_table_init[] =
{
 /* Name/size */                    /* MIN MAX EXP? Function */
  ...
  { STRING_SIZE_TUPLE("shortname"),     0,  1,  1,  func_shortname},


_______________________________________________
Make-w32 mailing list
Make-w32@gnu.org
https://lists.gnu.org/mailman/listinfo/make-w32

Reply via email to