2016-08-11 6 views
5

私はconfigureとすべての関連ファイル(私はautoreconfコマンドを使ってこれらのすべてを作る)を作るためにautomakeを使うプロジェクトを持っています。だから、プロジェクトがMacOS(OS X)、Windows、またはLinux用にコンパイルされているときに、コンパイルするためにいくつかの条件付きファイルを設定しようとしています。しかし、それは次のように失敗します。OSをautomakeでチェックする方法

$ 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 

私の質問は、OSがLinuxの場合、私がチェックする方法、ありますか?それが可能ならば、automakeのOSをチェックする良い方法はありますか?

+0

ペダンティカル(そして、オートツールを扱うときには大括弧が必要です)、 'automake'は' configure'を作成せず、まったく何もしません。 'automake'はテンプレート' Makefile.am'に基づいて 'Makefile.in'を作成します。 –

+0

OSがLinuxであるかどうかを確認する方法はありますが、気にしないでください。気にしないでください。あなたは、システムの特徴ではなく、システムの特定の特徴を気にします。必要な機能を特定し、それらの機能をテストし、Linux、OS X、Windowsのどちらであるか心配しないでください。とにかく、すべてのLinuxが同じであると仮定するべきではないので、これはより堅牢になります。 –

+0

@William Pursell automakeについての説明をいただきありがとうございます。私は 'autoreconf'を使ってすべてのものを作っています。正確な名前はわかりません。特別なこのファイルのためには、標準のCライブラリのみが必要です。 OS XではAppleScriptが必要です.AppleScriptはそこでしか利用できません。また、Windowsでは直接サポートされていません(スタブ関数)。ですから、CライブラリはすべてのLinuxに共通しているので、Linuxだけであるかどうかを確認する必要があります。 – melchor629

答えて

12

あなたはdirectly in the Makefileそれを検出、またはあなたがautoreconfを使用しているためには、configureソースファイル(おそらくconfigure.ac)に条件文を定義することができます。

# 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は、ターゲット・システムを意味し、もしそうであればコンパイル中のシステムのOS条件を設定します。

+0

'Makefile.am'で直接検出しようとしましたが、エラーが出ます。 'configure.ac'でこのソリューションを使用する場合は、いいえ。答えをありがとう – melchor629

-3

lsb_releaseコマンドを使用してオペレーティングシステムの種類とバージョンを確認しましたか?

+0

このトリックはできますか?私は試してみる – melchor629

+1

'lsb'はLinux Standard Baseを意味します。このコマンドは他の多くのオペレーティングシステムで利用できると思いますか?例えば、MSYS2/MinGW64ではなく、私の本では役に立たない。 'uname'ははるかに適切かつ存在する可能性が高いコマンドです。しかし、とにかく、理想的には、この種のチェックは、関連性があってもユーザーが他のツールを呼び出して解析する必要があるのではなく、Autotoolsが処理するべきものです。 (Autotoolsは理想的な_quite_ではありません!) –

関連する問題