gnumake problem

Posted on 2002-04-09
Last Modified: 2010-03-31
Having trouble getting gnumake to work (my first time, usually use IDE)

There is a difference between the location of the class files generated by “make” and where “make clean” looks to rm files. When doing a “make clean”, the window will show

make[1]: Entering directory `G:/Dev/Java/JProjectName
rm -f G:\Dev\JProjectName/classes\com\aaa\bbb\main\*.class

This doesn’t correspond to the location of the class files, which are in, for example,

(The difference being /src/)
Which is “correct”? That is, does /src/ belong in the path of the class files?  I suspect it does, because the package declaration in the java files contains “src”
That being the case, what needs to be done to get “make clean” to use the correct path?

It also concerns me that there both \ and / in the some statements, but that may not be an issue.

Various info:

JAVA_DEV_ROOT = G:\Dev\Java\JProjectName
JAVA_HOME = C:\jdk1.3.1_01
IS_UNIX = null

Variable values when debugging main makefile

PACKAGE = (or,
(one would think this should be
PACKAGE_LOC = com/aaa/bbb/main (or com/aaa/bbb/foo2, com/aaa/bbb/foo3)
DESTINATION = G:\Dev\Java\JProjectName/classes
PACKAGE_DIR = G:\Dev\Java\JProjectName/classes/com\aaa\bbb\main (or…)

Directories in the root are:

/src/ contains packages:

Actual paths are:

The Project makefile (G:\Dev\Java\JProjectName\makefile) is:
JBBB = \
     jprojectname.jar \
MAIN_CLASS     = JProjectName
MAIN_JAR       = JProjectName.jar

A package makefile (e.g. G:\Dev\Java\JprojectName\src\com\aaa\bbb\main\makefile) looks like:

SOURCE  = \ \
include $(JAVA_DEV_ROOT)/Makefile

Example package declaration in a java file:

Another symptom:

When doing a "make run" I get a NoClassDefFoundError

G:\Dev\Java\ JProjectName >make run
c:\jdk1.3.1_01/bin/java -classpath c:\jdk1.3.1_01/jre/lib/rt.jar;;G:\Dev\Java\ JProjectName /classes;G:\Dev\Java\ JProjectName/jars/jprojectname.jar; JProjectName \

Exception in thread "main" java.lang.NoClassDefFoundError: com/aaa/bbb/main/ JProjectName
make: *** [run] Error 1

Question by:jdaues

Accepted Solution

Igor Bazarny earned 100 total points
ID: 6928825
I guess you either need to change PACKAGES value and something not shown here in your build script--it decides to put src between JAVA_DEV_ROOT and package directory, or don't start your package with src. Second option looks right to me, by naming convention your package name should start with your company domain name in reversed order, I doubt it's

Generally, your project structure looks OK, when package name doesn't start with src. src/com/aaa/bbb/ compiles to classes/com/aaa/bbb/File.class. You have separate directory for sources (src) and package structure below it and directory for compiled classes (classes) with same structure below

Igor Bazarny,
Brainbench MVP for Java 1

Author Comment

ID: 6929456
Originally, I didn't have "src" in the package names, but in hacking at it to get it to work I added it, though it didn't feel right.  So I have removed it on your advice.

I am compiling the project both with gnumake and with an IDE (Eclipse) and this turned out to be the issue because I had root directory the same (G:\Dev\Java\JProjectName) for them, when in fact they should be different.  For gnumake, the root should be G:\Dev\Java\JProjectName and for Eclipse it should be G:\Dev\Java\JProjectName\src  

So now all is well, thanks.

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For customizing the look of your lightweight component and making it look lucid like it was made of glass. Or: how to make your component more Apple-ish ;) This tip assumes your component to be of rectangular shape and completely opaque. (COD…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:

919 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now