Использование макросов m4 с Eclipse & Java - PullRequest
2 голосов
/ 07 октября 2009

Есть ли способ использовать макросы m4 при разработке на Java для Eclipse, т.е. убедиться, что препроцессор автоматически вызывается перед компиляцией Eclipse?

Или кто-нибудь успешно использовал другой препроцессор с Eclipse?

Ответы [ 2 ]

1 голос
/ 08 мая 2012

Я думаю, у меня есть способ.

Я только сейчас начал работать с препроцессором c в eclipse на windows. Я уверен, что он может быть адаптирован к M4, но я действительно использую способность gnu CPP создавать файлы make, выражающие зависимости файла. Делать это для m4 было бы до вас. У него есть несколько проблем. Если во время предварительной обработки произошла ошибка, затмение игнорирует ее и продолжает движение. Также, если вы создали команду «run», консольный вывод препроцессора исчезнет, ​​как только программа запустится.

Так как я не понимаю муравья и у меня нет времени учиться, моя версия основана на использовании Ruby для клея. Я написал небольшую автоматику в Ruby, которая берет список файлов, которые были затронуты до последней сборки, отфильтровывает те, которые являются предварительно обработанными файлами, и те, которые входят в препроцессор, сканирует нетронутые файлы препроцессора, чтобы увидеть, зависят ли они от чего-либо был изменен, затем обрабатывает их все.

Все это зависит от использования "строителей" Eclipse, которые работают только в Juno. В моем случае настройки для проекта: создать компоновщик для параметров проекта, который запускается до компоновщика Java установить расположение: C: \ Ruby192 \ bin \ ruby.exe установите рабочий каталог в C: \ Ruby192 \ bin \ установите аргументы в: C: \ preprocessors \ mymake.rb $ {build_project} $ {build_files: acf} это передает каталог проекта, сопровождаемый файлом, который был затронут установите «обновить» в «проект, содержащий выбранный ресурс» и «рекурсивно включить подпапку» установить параметры сборки: выделить консоль Запустите компоновщик: после очистки, при ручной сборке и при автоматической сборке

Обратите внимание, что в соответствии с моей простой сборкой файлы ".jpp" будут обрабатываться в файлы ".java". и файлы ".jpp" могут включать в себя файлы ".jph" (и только файлы .jph) Файлы «.jph» также могут включать в себя файлы «.jph» и только файлы «.jph»

Все эти файлы должны находиться в каталоге / src / (рекурсивно в каталогах в / src /, как eclipse организует Java-код и пакеты).

Вот код Ruby:

require 'set'
$path = (ARGV[0].gsub('\\','/')+'/src')
$process=(ARGV[1..-1]||[]).map{ |a| a.gsub('\\','/') }
def pending(ending)
    ($process.select do |a| 
        a[0..$path.length-1]==$path && a[-4..-1].downcase == ending
    end).to_set
end
def read_make_dependencies(filename)
    ((File.open(filename).read.
        split("\n")[1..-1].
        map do |a|
            if a[-2..-1]==' \\'
                a=a[0..-3]
            end
            a.lstrip.gsub('\\/','/').gsub('\\','/').rstrip
        end)||[]).to_set
end
$pendingJph=pending('.jph')
$pendingJpp=pending('.jpp')

Dir.chdir($path)

$untouchedJph=Dir['**/*.jph'].map{|a| $path+'/'+a}.to_set - $pendingJph
$untouchedJpp=Dir['**/*.jpp'].map{|a| $path+'/'+a}.to_set - $pendingJpp

Dir.chdir('C:/MinGW/bin')

$pendingJph.each do|a|
    o = a[0..-4]+'depend'
    system "cpp -MM \"#{a}\" -o \"#{o}\""
    $pendingJph = $pendingJph + read_make_dependencies(o)
end

$untouchedJpp.each do|a|
    o = a[0..-4]+'depend'
    system "cpp -MM \"#{a}\" -o \"#{o}\""
    if not (read_make_dependencies(o) & $pendingJph).empty?
        puts "touching #{a}"
        $pendingJpp << a
    end
end

$pendingJpp.each do|a|
    o = a[0..-4]+'java'
    puts "processing #{a}"
    system "cpp -w -P -C -x c \"#{a}\" -o \"#{o}\""
end
1 голос
/ 08 октября 2009

Вы можете указать произвольный компоновщик в проекте Eclipse и заказать его так, чтобы он выполнялся до запуска компоновщика Java.

Чтобы определить нового построителя, откройте свойства проекта (щелкните правой кнопкой мыши -> Свойства или alt - введите ), выберите Строители , затем Новый ... . Выберите Program , затем в диалоговом окне настройте компоновщик (надеюсь, вы знаете, что нужно сделать здесь) и нажмите OK. Вернувшись на страницу Builders , вы можете выбрать нового компоновщика и выбирать Up до тех пор, пока не появится Java Builder

.
...