2009-10-07 5 views
2

Eclipse 용 Java에서 개발할 때 m4 매크로를 사용할 수 있습니까? Eclipse가 컴파일되기 전에 전처리 기가 자동으로 호출되는지 확인 하시겠습니까?Eclipse 및 Java에서 m4 매크로 사용

아니면 이클립스에서 다른 프리 프로세서를 성공적으로 사용 한 사람이 있습니까?

답변

1

Eclipse 프로젝트에서 임의의 빌더를 지정하고 빌더가 Java 빌더가 실행되기 전에 실행되도록 명령 할 수 있습니다.

, 새로운 빌더를 정의하는 프로젝트 속성 ( 우측 클릭 -> 속성 또는 고도 - 입력)를 열려면, 빌더 다음 새로운 ...를 선택합니다. 프로그램을 선택하고 대화 상자에서 빌더를 구성한 다음 (여기서 수행해야 할 사항을 알고 있으면) 확인을 선택하십시오. 위로 빌더 페이지에서 당신은 당신의 새로운 빌더를 선택하고 내가 방법이 생각 자바 빌더

+0

난 당신이 그것을 할 수있는 방법 프로그램 구성을 계몽하시기 바랍니다 수 있습니다,이 작업을 수행하는 데 필요한하십시오

다음은 루비 코드입니다. –

1

전에 때까지까지 를 선택할 수 있습니다.

방금 ​​Windows의 Eclipse에서 C 전처리기를 사용하고 있습니다. M4에 적용 할 수있을 것이라고 확신하지만 gnu CPP의 기능을 사용하여 파일의 종속성을 표현하는 파일을 만듭니다. m4에서 그렇게하는 것은 당신에게 달려 있습니다. 그것은 몇 가지 문제가 있습니다. 사전 처리 중에 오류가 있으면 eclipse은이를 무시하고 계속 진행합니다. 또한 "run"으로 빌드 한 경우 프로그램이 시작되면 전 처리기의 콘솔 출력이 사라집니다.

개미를 이해하지 못하고 배울 시간도 없으므로 내 버전은 접착제로 Ruby를 사용하고 있습니다. 나는 Ruby에서 마지막 make 전에 다루어 진 파일리스트를 취하고, 프리 프로세싱 된 것들을 필터링하고, 프리 프로세서 인 것을 포함하는 작은 automake를 쓴다. 손대지 않은 프리 프로세서 파일을 스캔하여 그 것들에 의존 하는지를 확인한다. 변경된 다음 모두 처리합니다.

이들은 모두 Juno에서만 작동하는 Eclipse의 "빌더"사용에 달려 있습니다. 필자의 경우 프로젝트 설정은 다음과 같습니다. 자바 빌더 이 C : \ Ruby192 \ bin \ ruby.exe로 설정되기 전에 실행되는 프로젝트 설정에 대한 빌더를 만듭니다. 작업 디렉토리를 C : \로 설정합니다. Ruby192 \ bin \ 인수를 다음과 같이 설정합니다. C : \ preprocessors \ mymake.rb $ {build_files : acf} $ {build_files : acf} 이 파일은 프로젝트의 디렉토리 다음에을 "새로 고침" "프로젝트 선택한 리소스를 포함"하고 세트가 빌드 옵션 '재귀 적으로 하위 폴더를 포함하는 "할당 콘솔 실행 빌더 : 청소 후, 수동 빌드하는 동안, 그리고 autobuilds

없음 동안 내 단순한 ".jpp"파일은 ".java"파일로 처리됩니다. 및 ".jpp"파일은 #include ".jph"파일 (및 .jph 파일 만 가능) ".jph"파일은 또한 ".jph"파일과 ".jph"파일 만 포함합니다.

이 파일은 모두/src/디렉토리 아래에 있어야합니다 (재귀 적으로/src/아래의 디렉토리에서 이클립스가 Java 코드 및 패키지를 구성하는 방법입니다) .

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