Как проверить ОС с помощью 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 ответа:
Вы можете обнаружить его непосредственно в файле 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
относится к целевой системе, поэтому при кросс-компиляции она устанавливает условное обозначение операционной системы компилируемой системыв .