2

Java for Eclipse で開発するときに m4 マクロを使用する方法はありますか。Eclipse がコンパイルされる前に、プリプロセッサが自動的に呼び出されるようにしますか?

または、別のプリプロセッサを Eclipse で正常に使用した人はいますか?

4

2 に答える 2

1

私には方法があると思います。

WindowsのEclipseでcプリプロセッサで動作するようになりました。M4に適応できると確信していますが、ファイルの依存関係を表すmakeファイルを作成するgnu CPPの機能を使用しています。m4でそれを行うのはあなた次第です。いくつか問題があります。前処理中にエラーが発生した場合、Eclipse はそれを無視して続行します。また、「run」でビルドした場合、プリプロセッサのコンソール出力は、プログラムが開始されるとすぐに消えます。

私は ant を理解しておらず、学習する時間がないため、私のバージョンは接着剤として Ruby を使用することに基づいています。Ruby でちょっとした automake を書きました。この automake は、最後の make の前に変更されたファイルのリストを取得し、プリプロセスされたファイルとプリプロセッサのインクルードであるファイルを除外し、未処理のプリプロセッサ ファイルをスキャンして、それらが何かに依存しているかどうかを確認します。変更されてから、それらすべてを処理します。

これらはすべて、Juno でのみ機能するように見える Eclipse の「ビルダー」の使用に依存しています。私の場合、プロジェクトの設定は次のとおりです。Java ビルダーが場所を C:\Ruby192\bin\ruby.exe に設定する前に実行されるプロジェクト設定のビルダーを作成します。作業ディレクトリを C:\Ruby192\bin\ に設定します。引数を次のように設定します: C:\preprocessors\mymake.rb ${build_project} ${build_files:acf} これにより、プロジェクトのディレクトリが渡され、その後に変更されたファイルが渡されます。「refresh」を「選択したリソースを含むプロジェクト」に設定します。および「再帰的にサブフォルダーを含める」ビルドオプションを次のように設定します:コンソールを割り当てるビルダーを実行します:クリーン後、手動ビルド中、および自動ビルド中

私の単純なmakeに従って、「.jpp」ファイルは「.java」ファイルに処理され、「.jpp」ファイルは「.jph」ファイルを含めることができます(.jphファイルのみ)「.jph」ファイルも # 「.jph」ファイルを含め、「.jph」ファイルのみを含める

これらのファイルはすべて /src/ ディレクトリの下にある必要があります (Eclipse が Java コードとパッケージを編成する方法である /src/ の下のディレクトリに再帰的に配置されます)。

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
于 2012-05-08T10:52:09.230 に答える
1

Eclipse プロジェクトで任意のビルダーを指定し、Java ビルダーが実行される前に実行されるようにビルダーを注文できます。

新しいビルダーを定義するには、プロジェクト プロパティを開き (右クリック -> [プロパティ] またはalt- enter)、[ビルダー]、[新規... ] の順に選択します。Programを選択し、ダイアログでビルダーを構成し (ここで何をする必要があるかを知っていることを願っています)、OK を選択します。Buildersページに戻り、新しいビルダーを選択して、 Java Builderの前になるまでUpを選択します。

于 2009-10-07T21:46:08.120 に答える