如何用automake检查操作系统

我有一个项目,使用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命令来确定操作系统的类型和版本?