Вызов препроцессорного инструмента из Java - PullRequest
1 голос
/ 05 апреля 2011

У меня есть источник C, который я предварительно обработал, используя MCPP, препроцессор.Я хочу проанализировать этот предварительно обработанный источник с анализатором Java.Для этого мне нужно вызвать его из Java.Есть ли какой-либо API для обработки такого вызова.Я планирую выполнять команды DOS в виде командного файла и выполнять его во время выполнения Java.Когда я использовал стандартный метод exec

Runtime r = Runtime.getRuntime();  
Process dos = r.exec("cmd.exe /c C:\\mcpp\\bin\\mcpp.exe -Iinclude csample.c");

Это дает ошибку, что препроцессор не может открыть входной файл.
Ожидаются предложения.

cmd параметры редактируются

Ответы [ 3 ]

0 голосов
/ 05 апреля 2011

А как же

Runtime r = Runtime.getRuntime();  
Process dos = r.exec("C:\\mcpp\\bin\\mcpp.exe -Iinclude csample.c");

?

0 голосов
/ 05 апреля 2011

Ваша проблема в том, что ваша команда выполняется в другом каталоге, чем вы ожидаете. Вам необходимо предоставить соответствующий каталог, используя версию с тремя аргументами exec():

public Process exec(String command,
                    String[] envp,
                    File dir)
             throws IOException

где третий аргумент указывает текущий каталог для выполняемой команды. Обязательно установите его в каталог, где находится вход.

РЕДАКТИРОВАТЬ: Пример:

r.exec("cmd.exe /c C:\\mcpp\\bin\\mcpp.exe -Iinclude csample.c", 
       null, // inherit current process environment
       new File("/path/containing/csample.c"));
0 голосов
/ 05 апреля 2011

ProcessBuilder приходит на ум

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...