我尝试从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:目标“生成”的配方失败
答案 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);
}