M4 如何检测是否针对 x86 进行编译?



(ps当我说x86时,我也指x86_64(我正在做一个可以为几个不同平台编译的项目,我有一些x86特定的文件,只有当我针对x86(与ARM或其他任何东西相反(进行编译时才应该添加这些文件

基本上是在寻找类似的东西

IS_X86([
dnl compiling for x86
], [
dnl compiling for something other than x86
])

所以。。如何检测我是否在m4中为x86进行编译?

编辑:根据评论,这显然是一个GNU Autoconf解决方案,而不是一个纯粹的M4解决方案(就我个人而言,我几乎不知道M4和Autoconf,我甚至不知道这是Autoconf特定的代码(

这是我最后想到的。。似乎有效,所以除非有人有更好的建议,

dnl
dnl PHP_CHECK_X86_TARGET
dnl
dnl check if we're compiling for x86/x86_64
dnl
AC_DEFUN([PHP_CHECK_X86_TARGET], [
AC_CACHE_CHECK([for x86 target],ac_cv_target_x86,[
AC_RUN_IFELSE([AC_LANG_SOURCE([[
int main(void) {
#if defined(__x86_64__) || defined(__i386__)
return 0;
#else
return 1;
#endif
}
]])],[
ac_cv_target_x86=yes
],[
ac_cv_target_x86=no
],[
ac_cv_target_x86=no
])])
])

dnl
dnl PHP_CHECK_WINDOWS_TARGET
dnl
dnl check if we're compiling for windows
dnl
AC_DEFUN([PHP_CHECK_WINDOWS_TARGET], [
AC_CACHE_CHECK([for windows target],ac_cv_target_windows,[
AC_RUN_IFELSE([AC_LANG_SOURCE([[
int main(void) {
#if defined(_WIN32)
return 0;
#else
return 1;
#endif
}
]])],[
ac_cv_target_windows=yes
],[
ac_cv_target_windows=no
],[
ac_cv_target_windows=no
])])
])

dnl
dnl PHP_CHECK_UNIX_TARGET
dnl
dnl check if we're compiling for a unix-ish target
dnl
AC_DEFUN([PHP_CHECK_UNIX_TARGET], [
AC_CACHE_CHECK([for unix-ish target],ac_cv_target_unix,[
AC_RUN_IFELSE([AC_LANG_SOURCE([[
int main(void) {
#if defined(unix) || defined(__unix) || defined(__unix__)
return 0;
#else
return 1;
#endif
}
]])],[
ac_cv_target_unix=yes
],[
ac_cv_target_unix=no
],[
ac_cv_target_unix=no
])])
])

最新更新