我有一个项目,使用automake创buildconfigure
和所有相关的文件(我使用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
我的问题是,如何检查操作系统是否是Linux? 如果可能的话,有没有更好的方法来检查automake中的操作系统?
您可以直接在Makefile中检测到它,或者在configure源文件(可能是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"])
注意:
host_os
指的是目标系统,所以如果您正在交叉编译,它将设置您正在编译的系统的操作系统条件。
您是否尝试过使用lsb_release命令来确定操作系统的类型和版本?