预期 UID 后跟 ':' make: *** [Makefile:130: 编译器] 错误 255

预期 UID 后跟 ':' make: *** [Makefile:130: 编译器] 错误 255

我试图构建 Sather 编译器,一切进展顺利,但在执行 make 时出现此错误:


Creating C for installation compiler...

Boot/sacomp     -verbose -O_fast -O_no_move_while -O_no_hoist_const -O_no_cse -only_reachable Compiler/sacomp.module -o Bin/sacomp -only_C
/usr/local/src/sather-1.2.3/System/Common/CONFIG:1:error, expected an UID followed by a ':'
make: *** [Makefile:130 : compiler] Erreur 255

这似乎不是一个依赖性问题(我认为我已经安装了它们)。以下是整个输出,希望对您有所帮助(抱歉我的电脑是法语的):

make[1] : on entre dans le répertoire « /usr/local/src/sather-1.2.3/System/Common »
make[1]: rien à faire pour « all ».
make[1] : on quitte le répertoire « /usr/local/src/sather-1.2.3/System/Common »

Making serial library: System Socket 
Containers 

Making platform BOOT...
make[1] : on entre dans le répertoire « /usr/local/src/sather-1.2.3/System/Platforms/BOOT »
make[1]: rien à faire pour « all ».
make[1] : on quitte le répertoire « /usr/local/src/sather-1.2.3/System/Platforms/BOOT »
Making platform linux...
make[1] : on entre dans le répertoire « /usr/local/src/sather-1.2.3/System/Platforms/linux »
make[1]: rien à faire pour « all ».
make[1] : on quitte le répertoire « /usr/local/src/sather-1.2.3/System/Platforms/linux »

Making boot compiler...

make -C System/Platforms/linux boot CC='gcc'
make[1] : on entre dans le répertoire « /usr/local/src/sather-1.2.3/System/Platforms/linux »
ln -sf `pwd`/header.h ../BOOT
make -C /usr/local/src/sather-1.2.3/Boot/sacomp.code CC=gcc
make[2] : on entre dans le répertoire « /usr/local/src/sather-1.2.3/Boot/sacomp.code »
make[2]: « ../sacomp » est à jour.
make[2] : on quitte le répertoire « /usr/local/src/sather-1.2.3/Boot/sacomp.code »
rm -f ../BOOT/header.h
make[1] : on quitte le répertoire « /usr/local/src/sather-1.2.3/System/Platforms/linux »

Creating C for installation compiler...

Boot/sacomp     -verbose -O_fast -O_no_move_while -O_no_hoist_const -O_no_cse -only_reachable Compiler/sacomp.module -o Bin/sacomp -only_C
/usr/local/src/sather-1.2.3/System/Common/CONFIG:1:error, expected an UID followed by a ':'
make: *** [Makefile:130 : compiler] Erreur 255

任何帮助,或者在 Ubuntu 上安装 Sather 的更简单的方法

答案1

问题似乎是,另一个 System/Common/Makefile 使用 C 预处理器将cppCONFIG.proto 预处理为 CONFIG。由于cpp不知道预期的输出是sather而不是C,它会处理并在 CONFIG 文件的开头插入标准头文件 /usr/include/stdc-predef.h,您可以通过以下方式验证

cpp -dI System/Common/CONFIG.proto | head

因为 make 变量CPP在顶层 Makefile 中定义为CPP=/lib/cpp -C -P,所以输入文件中的注释不会被隐藏。因此 CONFIG 文件的/* C-style */顶部最终会出现一个很大的注释块,这显然会阻塞sather解析器(它显然希望注释以 开头-)。

stdc-predef.h 的包含似乎是在 GCC 4.8 中引入的,强制向后兼容的推荐方法是使用此选项-ffreestanding(尽管此选项似乎没有在 cpp 手册页中记录):

make clean
make CPP='cpp -ffreestanding -C -P'

然后你应该能够执行./Bin/sacomp如下操作

SATHER_HOME=. ./Bin/sacomp
There is no class named MAIN.

(大概它希望给出一个或多个源文件的名称)。

移植到 GCC 4.8

相关内容