gpt4 book ai didi

linux - 如何在配置中打印 C 宏的值

转载 作者:太空狗 更新时间:2023-10-29 11:12:58 31 4
gpt4 key购买 nike

我有 configure.in 脚本。我想调用 configure(在 autoheader && autoconf 之后)并从系统 header page_types.h 查看 PAGE_SHIFT 宏的值>。像这样:

正在检查 PAGE_SHIFT...12

我试过那些:

1.

AC_CHECK_DECL([PAGE_SHIFT],[HAVE_PAGE_SHIFT=$PAGE_SHIFT],[],
[#include <linux/module.h>])
AC_MSG_NOTICE([${HAVE_PAGE_SHIFT}])

结果:检测到宏PAGE_SHIFT,但还没有打印

checking whether PAGE_SHIFT is declared... yes
configure:

2.

HAVE_PAGE_SHIFT="Unknown"
AC_MSG_CHECKING([PAGE_SHIFT])
AC_COMPILE_IFELSE(
[
AC_LANG_PROGRAM([
#include <linux/module.h>
#include <stdio.h>
],
[
printf("%d\n", PAGE_SHIFT);
])],
[HAVE_PAGE_SHIFT="$PAGE_SHIFT"], [])
AC_MSG_RESULT([${HAVE_PAGE_SHIFT}])

结果:无效

checking PAGE_SHIFT... 

3.

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
  1. 方法是suggested通过布雷特黑尔

Autoconf 会生成这样的东西:

#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;

Autoconf 版本:autoconf (GNU Autoconf) 2.69

最佳答案

我建议使用 AC_COMPUTE_INT宏。例如,

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])

或者,您可以将 FAILURE 宏替换为 PAGE_SHIFT_VAL=0 并测试 (0) 的值是否可以恢复错误。

请注意,在此上下文中,变量名 PAGE_SHIFT_VAL 并没有什么神奇之处;您可以使用其他名称。如果您希望在生成的文件(例如 config.h)或 AC_CONFIG_FILES 中列出的文件中替换此值,您仍然需要 AC_SUBST

关于linux - 如何在配置中打印 C 宏的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33956160/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com