如何使用 automake 检查 OS
How to check the OS with automake
我有一个项目使用 automake 创建 configure
和所有相关文件(我正在使用 autoreconf
命令来制作所有这些东西)。因此,我试图在项目为 macOS (OS X)、Windows 或 Linux 编译时设置一些条件文件进行编译。但它失败了:
$ autoreconf -i ..
src/Makefile.am:30: error: LINUX does not appear in AM_CONDITIONAL
autoreconf: automake failed with exit status: 1
包含 Makefile.am
错误的部分如下:
if OSX
butt_SOURCES += CurrentTrackOSX.h CurrentTrackOSX.m
endif
if LINUX
butt_SOURCES += currentTrack.h currentTrackLinux.cpp
endif
if WINDOWS
butt_SOURCES += currentTrack.h currentTrack.cpp
endif
我的问题是,如何检查 OS 是否为 Linux?如果可能的话,有没有更好的方法来检查 automake 中的 OS?
您是否尝试过使用lsb_release命令来确定操作系统的类型和版本?
您可以检测到它 directly in the Makefile,或者在配置源文件中定义条件(可能 configure.ac
),因为您使用的是 autoreconf
:
# AC_CANONICAL_HOST is needed to access the 'host_os' variable
AC_CANONICAL_HOST
build_linux=no
build_windows=no
build_mac=no
# Detect the target system
case "${host_os}" in
linux*)
build_linux=yes
;;
cygwin*|mingw*)
build_windows=yes
;;
darwin*)
build_mac=yes
;;
*)
AC_MSG_ERROR(["OS $host_os is not supported"])
;;
esac
# Pass the conditionals to automake
AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"])
AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"])
AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"])
Note: host_os
refers to the target system, so if you are cross-compiling it sets the OS conditional of the system you are compiling to.
我有一个项目使用 automake 创建 configure
和所有相关文件(我正在使用 autoreconf
命令来制作所有这些东西)。因此,我试图在项目为 macOS (OS X)、Windows 或 Linux 编译时设置一些条件文件进行编译。但它失败了:
$ autoreconf -i ..
src/Makefile.am:30: error: LINUX does not appear in AM_CONDITIONAL
autoreconf: automake failed with exit status: 1
包含 Makefile.am
错误的部分如下:
if OSX
butt_SOURCES += CurrentTrackOSX.h CurrentTrackOSX.m
endif
if LINUX
butt_SOURCES += currentTrack.h currentTrackLinux.cpp
endif
if WINDOWS
butt_SOURCES += currentTrack.h currentTrack.cpp
endif
我的问题是,如何检查 OS 是否为 Linux?如果可能的话,有没有更好的方法来检查 automake 中的 OS?
您是否尝试过使用lsb_release命令来确定操作系统的类型和版本?
您可以检测到它 directly in the Makefile,或者在配置源文件中定义条件(可能 configure.ac
),因为您使用的是 autoreconf
:
# AC_CANONICAL_HOST is needed to access the 'host_os' variable
AC_CANONICAL_HOST
build_linux=no
build_windows=no
build_mac=no
# Detect the target system
case "${host_os}" in
linux*)
build_linux=yes
;;
cygwin*|mingw*)
build_windows=yes
;;
darwin*)
build_mac=yes
;;
*)
AC_MSG_ERROR(["OS $host_os is not supported"])
;;
esac
# Pass the conditionals to automake
AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"])
AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"])
AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"])
Note:
host_os
refers to the target system, so if you are cross-compiling it sets the OS conditional of the system you are compiling to.