如何让gnatmake工具用项目编译RTS?

时间:2014-10-13 10:11:41

标签: ada gnat

有没有办法让gnatmake工具重新编译Ada的运行时库(“RTS”),我正在按文件构建项目?我想集成我的自定义预处理器,为ada源代码添加一些功能,然后用gcc编译它。我将--GCC=<preprocessor>标志传递给gnatmake实用程序,它会自动计算出依赖关系并运行我的所有源文件的预处理器。但是我想要在RTS中对代码进行自定义预处理,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

-a标志告诉gnatmake重新编译需要重新编译的任何RTS文件。

在这里进行一些实验之后,似乎将system.ads(可能是gnat.adsinterfac.ads ..是)从编译器的adainclude/目录复制到源树(我认为每当你更新预处理器时你都需要touch),gnatmake可以做你想做的事。

$ cp /opt/gcc-4.9.0/lib/gcc/x86_64-apple-darwin13/4.9.0/adainclude/system.ads .
$ gnatmake -a int
gcc -c int.adb
gcc -gnatpg -c -I./ -I- /opt/gcc-4.9.0/lib/gcc/x86_64-apple-darwin13/4.9.0/adainclude/s-stalib.adb
gcc -gnatpg -c -I./ -I- /opt/gcc-4.9.0/lib/gcc/x86_64-apple-darwin13/4.9.0/adainclude/a-except.adb
gcc -gnatpg -c -I./ -I- /opt/gcc-4.9.0/lib/gcc/x86_64-apple-darwin13/4.9.0/adainclude/s-valint.adb
gcc -gnatpg -c system.ads
...
gcc -gnatpg -c -I./ -I- /opt/gcc-4.9.0/lib/gcc/x86_64-apple-darwin13/4.9.0/adainclude/s-conca4.adb
gnatbind -x int.ali
gnatlink int.ali

然后,我意识到我没有使用-gnata

$ touch int.adb
$ gnatmake -a -gnata int
gcc -c -gnata int.adb
gcc -gnatpg -c -I./ -gnata -I- /opt/gcc-4.9.0/lib/gcc/x86_64-apple-darwin13/4.9.0/adainclude/s-assert.adb
gnatbind -x int.ali
gnatlink int.ali

(我想在这里使用-f,因为它会重建所有内容。)