【发布时间】:2016-12-18 07:47:02
【问题描述】:
我有一个项目使用 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 中的操作系统?
【问题讨论】:
-
为了迂腐(在处理自动工具时迂腐是必要的),
automake不会创建configure并且与它完全无关。automake基于模板Makefile.am创建Makefile.in。 -
有一些方法可以检查操作系统是否为 Linux,但您不关心,也不应该关心。您关心系统的特定功能,而不是系统是什么。确定您需要的功能,测试这些特定功能,不用担心它是 Linux、OS X 还是 Windows。这样做会更健壮,因为无论如何你不应该假设所有 Linux 都是相同的。
-
@William Pursell 感谢有关 automake 的澄清,我使用
autoreconf制作所有东西,但我不知道它的确切名称。而对于这个特别的文件,我只需要标准的 C 库。在 OS X 上需要 AppleScript,它只在那里可用。并且在 Windows 上是直接不受支持的(是一个存根函数)。所以我只需要检查是否是Linux,因为C库在所有Linux上都是通用的。 -
所以你不关心它是否是 Linux,你关心的是 AppleScript 是否可用或者你是否有一个特定的 libc。检查一下。