我正在编写一个makefile,它在另一个目录中编译.java
文件,然后我想运行它,而不更改目录。我想按照以下方式做点什么:
$(SQM_JAVA_TOOL_DONE) : $(SQM_JAVA_TOOL)
$(shell cd /home_dir)
javac myjavafile.java
java myjavafile
其中Java文件为/home/myjavafile.java
,并且makefile未从/home
运行。
我该怎么做?
答案 0 :(得分:37)
我可能会误解这个问题,但您可以使用
进行编译javac /home/MyJavaFile.java
这将在MyJavaFile.class
/home
然后,您可以通过在类路径中包含/home
来运行它。 e.g。
java -cp /home MyJavaFile
如果要在其他目录中生成类文件,则可以使用-d
选项javac
。
答案 1 :(得分:33)
使用-d
命令行参数和javac
告诉它您要将编译的类文件存储在哪个目录中。然后,要运行该程序,只需在类路径中包含此目录:
javac -d some/directory myjavafile.java
java -cp some/directory myjavafile
答案 2 :(得分:1)
只需添加到现有答案中,您可能需要--source-path
标志:
--source-path <path>, -sourcepath <path> Specify where to find input source files
我认为这有效地设置了软件包根javac
将从其编译(即<path>
将从文件的预期软件包名称中剥离)。仍然需要枚举要编译的文件,并且该文件仍应相对于当前工作目录,而不是相对于传递给--source-path
的路径。
例如,要从源代码存储在src/
中并且要在bin/
中构建的项目根目录进行编译和运行:
$ javac --source-path src -d bin src/mypackage/*.java
$ java -cp bin mypackage.Main
这甚至可以在文件系统中其他目录下使用,例如:
$ javac --source-path /some/absolute/path/src -d /some/absolute/path/bin /some/absolute/path/
$ java -cp /some/absolute/path/bin mypackage.Main