如何使用automake

时间:2016-08-11 14:03:49

标签: linux 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 个答案:

答案 0 :(得分:15)

您可以检测到它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"])
  

注意:host_os是指目标系统,因此如果您进行交叉编译,则将操作系统设置为您正在编译 的系统的条件。

答案 1 :(得分:-3)

您是否尝试使用 lsb_release 命令来确定操作系统的类型和版本?