Linux 如何在配置中打印C宏的值
我有Linux 如何在配置中打印C宏的值,linux,linux-kernel,autotools,autoconf,Linux,Linux Kernel,Autotools,Autoconf,我有configure.in脚本。我想调用configure(在autoheader&&autoconf之后)并从系统标题PAGE\u types.h中查看PAGE\u SHIFT宏的值。大概是这样的: #include <linux/module.h> static long int longval () { return PAGE_SHIFT; } static unsigned long int ulongval () { return PAGE_SHIFT; } #inclu
configure.in
脚本。我想调用configure
(在autoheader&&autoconf
之后)并从系统标题PAGE\u types.h
中查看PAGE\u SHIFT
宏的值。大概是这样的:
#include <linux/module.h>
static long int longval () { return PAGE_SHIFT; }
static unsigned long int ulongval () { return PAGE_SHIFT; }
#include <stdio.h>
#include <stdlib.h>
正在检查页面\u移位。。。12
我试过这些:
一,
二,
三,
#include <linux/module.h>
static long int longval () { return PAGE_SHIFT; }
static unsigned long int ulongval () { return PAGE_SHIFT; }
#include <stdio.h>
#include <stdlib.h>
Autoconf版本:Autoconf(GNU Autoconf)2.69我建议使用宏。e、 g
AC_MSG_CHECKING(['PAGE_SHIFT' value])
AC_COMPUTE_INT([PAGE_SHIFT_VAL], [PAGE_SHIFT], [[#include <linux/module.h>]],
AC_MSG_FAILURE([linux/module.h: could not determine 'PAGE_SHIFT' value]))
AC_MSG_RESULT([$PAGE_SHIFT_VAL])
AC\u MSG\u检查(['PAGE\u SHIFT'值])
AC#u COMPUTE_INT([PAGE_SHIFT_VAL],[PAGE_SHIFT],[include],
AC_MSG_故障([linux/module.h:无法确定'PAGE_SHIFT'值])
AC_MSG_结果([$PAGE_SHIFT_VAL])
或者,您可以使用PAGE\u SHIFT\u VAL=0
替换FAILURE
宏,并在错误可恢复的情况下测试(0)
的值
注意,在此上下文中,变量名
PAGE\u SHIFT\u VAL
没有什么神奇之处;你可以用另一个名字。如果希望在生成的文件(如config.h
)或AC\u config\u文件中列出的文件中替换此值,则仍然需要AC\u SUBST
,谢谢。您的方法不适用于内核头。Autoconf使此代码#include#include#include[…]
结果:包含在/usr/include/stdlib.h:314:0的文件中,来自conftest.c:125:/usr/include/x86\u 64-linux-gnu/sys/types.h:44:18:错误:包含在[…]中的文件中的“loff”的类型冲突,来自conftest.c:121:/lib/modules/4.2.0-18-generic/build/include/linux/types.h:45:26:注意:前面的“loff_t”声明在这里
@RomanZaytsev-您需要知道linux构建Makefile是如何工作的,以及如何设置内核(交叉)编译-这是“独立的”-使用gcc包含路径,CFLAGS
,sysroot选项等等。我的问题似乎太宽泛了,取决于交叉编译标志等等。我接受你的答案,因为它对于非内核头是正确的。
checking PAGE_SHIFT...
AC_MSG_CHECKING(['PAGE_SHIFT' value])
AC_RUN_IFELSE(
[
#include <linux/module.h>
#include <stdio.h>
int
main ()
{
printf("%d\n", PAGE_SHIFT);
return 0;
}
]
)
checking 'PAGE_SHIFT' value... 12
#include <linux/module.h>
static long int longval () { return PAGE_SHIFT; }
static unsigned long int ulongval () { return PAGE_SHIFT; }
#include <stdio.h>
#include <stdlib.h>
In file included from /usr/include/stdlib.h:314:0,
from conftest.c:125:
/usr/include/x86_64-linux-gnu/sys/types.h:44:18: error: conflicting types for 'loff_t'
typedef __loff_t loff_t;
^
In file included from /lib/modules/4.2.0-18-generic/build/arch/x86/include/asm/page_types.h:5:0,
from [...],
from conftest.c:121:
/lib/modules/4.2.0-18-generic/build/include/linux/types.h:45:26: note: previous declaration of 'loff_t' was here
typedef __kernel_loff_t loff_t;
AC_MSG_CHECKING(['PAGE_SHIFT' value])
AC_COMPUTE_INT([PAGE_SHIFT_VAL], [PAGE_SHIFT], [[#include <linux/module.h>]],
AC_MSG_FAILURE([linux/module.h: could not determine 'PAGE_SHIFT' value]))
AC_MSG_RESULT([$PAGE_SHIFT_VAL])