有没有办法让gnatmake工具重新编译Ada的运行时库(“RTS”),我正在按文件构建项目?我想集成我的自定义预处理器,为ada源代码添加一些功能,然后用gcc编译它。我将--GCC=<preprocessor>
标志传递给gnatmake实用程序,它会自动计算出依赖关系并运行我的所有源文件的预处理器。但是我想要在RTS中对代码进行自定义预处理,有没有办法做到这一点?
答案 0 :(得分:1)
-a
标志告诉gnatmake重新编译需要重新编译的任何RTS文件。
在这里进行一些实验之后,似乎将system.ads
(可能是gnat.ads
,interfac.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
,因为它会重建所有内容。)