在Eclipse和Java中使用m4宏
有没有办法在Java for Eclipse中开发时使用m4宏,即。 确保在Eclipse编译之前自动调用预处理器?
或者有没有人使用Eclipse成功使用另一个预处理器?
您可以在Eclipse项目上指定任意构建器,并对构建器进行排序,以便在运行Java构建器之前执行该构建器。
要定义新构建器,请打开项目属性(右键单击 – >属性或alt – 输入 ),选择“ 构建器”,然后选择“ 新建…” 。 选择Program ,然后在对话框中配置构建器(希望您知道需要在此处完成的操作)并选择OK。 回到Builders页面,然后您可以选择新构建器并选择Up,直到它位于Java Builder之前
我想我有办法。
我刚刚在Windows上的eclipse中使用了c预处理器。 我敢肯定它可以适应M4,但我使用gnu CPP的能力来创建表达文件依赖关系的make文件。 为m4做这件事取决于你。 它有一些问题。 如果在预处理过程中出现错误,eclipse会忽略它并继续运行。 此外,如果使用“run”构建,则预处理器的控制台输出会在程序启动后立即消失。
由于我不懂ant,而且我没有时间学习,我的版本是基于使用Ruby进行粘合。 我在Ruby中编写了一个小的automake,它获取了在最后一个make之前被触及的文件列表,过滤掉了那些预处理文件,以及那些预处理器包含的文件,扫描未经处理的预处理器文件以查看它们是否依赖于任何已被更改,然后处理所有。
这些都依赖于使用Eclipse的“构建器”,它们似乎只在Juno中工作。 在我的例子中,项目的设置是:为java构建器设置位置之前运行的项目设置创建构建器:C:\ Ruby192 \ bin \ ruby.exe将工作目录设置为C:\ Ruby192 \ bin \将参数设置为:C:\ preprocessors \ mymake.rb $ {build_project} $ {build_files:acf}这会传递项目的目录,然后是已触摸的文件,将“刷新”设置为“包含所选资源的项目”和“递归包含子文件夹”将构建选项设置为:分配控制台运行构建器:清理后,手动构建期间和自动创建期间
请注意,根据我的简单make“.jpp”文件将被处理成“.java”文件和“.jpp”文件可以#include“.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 -xc \"#{a}\" -o \"#{o}\"" end
- 在Android中将Parcelables数组写入Parcel
- 必须从UI线程(Android Studio)调用方法getText()
- 在android中使用liblame将pcm文件转换为mp3
- 尝试从我的android java应用程序调用web服务时android.os.NetworkOnMainThreadExceptionexception?
- Android / Java – 删除顺序加载动画延迟
- “不要将Android上下文类放在静态字段中; 这是内存泄漏“ – 静态视图的Lint警告
- 如何在Android Studio中编辑.jar文件
- Joda LocalTime Meridiem解析
- 为什么在Android中的Zone更改时,DateTimeZone.getDefault()不会更新