C/C++宏中的"@"符号代表什么?

3

我使用OpenWrt进行固件交叉编译时,遇到了一个奇怪的文件名为libbfd.h的问题,编译失败了。在libbfd.h的第83行:

79 #define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@
80 #define BFD_HOST_64BIT_LONG_LONG @BFD_HOST_64BIT_LONG_LONG@
81 #if @BFD_HOST_64_BIT_DEFINED@
82 #define BFD_HOST_64_BIT @BFD_HOST_64_BIT@
83 #define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@
84 typedef BFD_HOST_64_BIT bfd_int64_t;
85 typedef BFD_HOST_U_64_BIT bfd_uint64_t;
86 #endif

在这里,BFD_HOST_U_64_BIT 被定义为 @BFD_HOST_64_BIT@,那么 "@" 的含义是什么呢?我在测试文件中进行了测试,但无法编译。有人能帮助我吗?谢谢!


1
我猜它是一个变量,将被构建脚本替换? - sehe
1
如果我要猜的话,这是一个config替换文件,在配置和构建OpenWRT工具包时填充真实值。它可能不是直接包含的,而是用于生成一个版本,您*使用(或至少OpenWRT使用)的版本。 - WhozCraig
@sehe 是的,可能有一个脚本,但我现在找不到它,因为我编译它是自动化的。我只需运行 make menuconfig 然后配置后输入 make 即可。 - superK
2个回答

2

@VARIABLES@ 在目标系统上的配置期间将被替换为相应的值。

请参阅autoconf手册中的此页面

你是否按照通常的方式进行操作:

./configure
make

构建它?这些应该具有恒定的值。

不,我是使用自动化构建的。我只输入了 make menuconfig,然后配置完成后输入 make - superK
我不确定你的意思,但你需要找出如何在构建中运行预处理步骤。如果没有这样做,这可能只是你会遇到的许多错误中的第一个。 - Nick Veys
我使用OpenWrt的自动构建系统,按照这里的步骤http://kamikaze.openwrt.org/docs/openwrt.html#x1-410002.1.1操作,完整的命令为`./script/feeds update -a ./script/feeds install -a make menuconfig make`。 - superK

0

@字符不是C标准执行字符集的一部分,主要是因为它不是原始ASCII标准的一部分。

除非它是C实现的扩展的一部分,否则在C编译器看到它们之前,@将需要被移除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接