Как проверить ОС с помощью 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

Мой вопрос в том, как я могу проверить, является ли ОС Linux? И если это возможно, есть ли лучший способ проверить операционную систему в automake?

2 5

2 ответа:

Вы можете обнаружить его непосредственно в файле Makefile , или определить условные обозначения в файле configure source (вероятно, 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 для определения типа и версии операционной системы ?