bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: semi-colon in makefiles?


From: Martin Naskovski
Subject: Re: semi-colon in makefiles?
Date: Wed, 07 Feb 2001 15:15:14 -0800

Hi Paul, I am sorry, perhaps I was a little vague in my description - I'll fill you in on some more detail but thanks a bunch for replying, I still beleive it is a make error, unless I'm totally clueless but look at this first:

[contents of the dir]
C:\src\DEVELO~1\adserver\CUSTOM~1>dir
 Volume in drive C has no label.
 Volume Serial Number is 5CBA-6369

 Directory of C:\src\DEVELO~1\adserver\CUSTOM~1

02/07/2001  03:08p      <DIR>          .
02/07/2001  03:08p      <DIR>          ..
02/06/2001  06:51p              10,846 AdCampaignAds.java
02/06/2001  06:51p               8,347 AdCampaigns.java
02/06/2001  06:51p               7,583 AdClients.java
02/06/2001  06:51p              10,619 AdDist.java
02/06/2001  06:51p              41,806 adstats.java
02/06/2001  10:06p               6,334 adstatszone.properties
02/06/2001  06:51p               7,096 AdUsers.java
02/07/2001  03:08p                 605 makefile
               8 File(s)         93,236 bytes
               2 Dir(s)   2,456,240,128 bytes free

C:\src\DEVELO~1\adserver\CUSTOM~1>

[contents of makefile]
C:\src\DEVELO~1\adserver\CUSTOM~1>type makefile
JSUFFIXES = .class .java

.SUFFIXES: $(JSUFFIXES) $(SUFFIXES)

.DONE:@echo ALLCLASSES is $(ALLCLASSES)

.FAILED:@echo ALLCLASSES is $(ALLCLASSES)

#       Java language section.

JAVAC = javac

CLASSPATH = c:\apps\JSDK2.0\lib\jsdk.jar;c:\apps\javalibs\md5.jar

JFLAGS=-classpath $(CLASSPATH) -deprecation -g

COMPILE.java=$(JAVAC) $(JFLAGS)

.java.class:
        $(COMPILE.java) $<

ALLSOURCES=AdUsers.java\
AdCampaigns.java\
AdCampaignAds.java\
AdDist.java\
AdClients.java\
adstats.java


ALLCLASSES=$(ALLSOURCES:%java=%class)

all: $(ALLCLASSES)
        @echo making all \'$(ALLCLASSES)\'

C:\src\DEVELO~1\adserver\CUSTOM~1>

[make results]
C:\src\DEVELO~1\adserver\CUSTOM~1>make
javac -classpath c:\apps\JSDK2.0\lib\jsdk.jar;c:\apps\javalibs\md5.jar -deprecat
ion -g AdUsers.java
Usage: javac <options> <source files>

where <options> includes:
  -g                     Generate all debugging info
  -g:none                Generate no debugging info
  -g:{lines,vars,source} Generate only some debugging info
  -O                     Optimize; may hinder debugging or enlarge class files
  -nowarn                Generate no warnings
  -verbose               Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are used
  -classpath <path>      Specify where to find user class files
  -sourcepath <path>     Specify where to find input source files
  -bootclasspath <path>  Override location of bootstrap class files
  -extdirs <dirs>        Override location of installed extensions
  -d <directory>         Specify where to place generated class files
  -encoding <encoding>   Specify character encoding used by source files
  -target <release>      Generate class files for specific VM version
make.exe: *** [AdUsers.class] Error 2

C:\src\DEVELO~1\adserver\CUSTOM~1>

Now, the same script on unix (solaris 2.6) where classpath jars/classes are delimited with a colon (:) rather than a semicolon as in Win2k/dos/winwhatever, it runs a-ok, with as many classpath jars as you want it to. On Win2k, here, I get this dumb error, and I'm at a loss - am I not DENOTING the lame ';' (semicolon) properly or does make break when it sees it, that is, it thinks its something else, like end of a dependency or some such rule?

When I run the IDENTICAL command by hand on the command prompt as you see above (it's broken up because of the window size 80x25, otherwise the javac line is one line when I run it from command prompt) it COMPILES a-ok, which I forgot to mention in my previous email.

So, you dont think this is some bug? What am I missing? I was so frustrated yesterday you have no idea... :/. Please help.

Thanks again, and I hope I was more clear this time.

Martin


At 12:34 AM 2/7/2001 -0500, Paul D. Smith wrote:
%% Martin Naskovski <address@hidden> writes:

  mn> CLASSPATH = c:\apps\JSDK2.0\lib\jsdk.jar;c:\apps\javalibs\MD5.jar

  mn> JFLAGS=-classpath $(CLASSPATH) -deprecation -g

  mn> COMPILE.java=$(JAVAC) $(JFLAGS)

  mn> .java.class:
  mn>   @echo ----------------- $(HOSTNAME) javac $< -----------------------
  mn>   $(COMPILE.java) $<

  mn> When I run make, it fails to interpret the semi-colong that
  mn> separates MD5.jar and jsdk.jar as a literal, and it thinks it's
  mn> some dependency or some other command and it fails to compile my
  mn> .java file properly. How do I get 'make' to treat the semi-colon
  mn> as a literal and not as some implicit rule? I looked all over the
  mn> documentation, and maybe I missed it- or maybe this is a bug.

You didn't provide any information on the error you got, but I'll bet
it's not a make error.

Make doesn't treat semicolons as special in any way in the places you've
used it above (the value of a variable or in the command script).

Make simply sends the text of the command you tell it to run to the
shell it's using, and waits to see what the result is.  It doesn't
interpret or process the command in any way, except to expand make
variable references.

--
-------------------------------------------------------------------------------
 Paul D. Smith <address@hidden>          Find some GNU make tips at:
 http://www.gnu.org                      http://www.paulandlesley.org/gmake/
"Please remain calm...I may be mad, but I am a professional." --Mad Scientist




reply via email to

[Prev in Thread] Current Thread [Next in Thread]