为什么从Java应用程序运行MAKE会导致错误消息?

时间:2018-08-15 01:31:40

标签: java linux shell

我尝试从Java运行Linux Shell命令。这些命令可以直接在shell上正常运行,但总是会崩溃。
我有一个makefile,我尝试通过Java运行make。

我的Java代码:

String command = "make generate FILE=" + name ;
String [] envp = { } ;
File dir = new File ( System.getProperty("user.dir")) ;
Process proc = Runtime.getRuntime().exec(command,envp,dir);
proc.waitFor();

BufferedReader buf = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = "";
while ((line=buf.readLine())!=null) {
    System.out.println(line);
}

我的制作文件:

generate:
    llvm-as -f VSOP_Executable/$(FILE).ll -o $(FILE).bc
        llc $(FILE).bc
        gcc -c $(FILE).s -o $(FILE).o
        gcc $(FILE).o -o $(FILE) -no-pie

它总是在我尝试生成可执行文件的最后一行崩溃。
错误:

  

makefile:47:目标“生成”的配方失败

1 个答案:

答案 0 :(得分:1)

在他的评论中写为Paul Hicks。原因是清除了所有环境变量。

我更改了代码,并删除了空的envp。看来现在可以正常工作。

String cmd = "make generateVSOP FILE=" + name;
Runtime run = Runtime.getRuntime();
Process pr = run.exec(cmd);
pr.waitFor();

BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line = "";
while ((line=buf.readLine())!=null) {
    System.out.println(line);
}