2009-03-15 7 views
12

私は現在、小さなCプロジェクトをautotoolsからCMakeに変換しています。古いconfigure.inAutotoolsで行われているように、CMakeのヘッダファイルとライブラリ関数をチェックするには?

私は、次の行を使用して存在するために、すべてのヘッダとライブラリの機能をチェックする:

# Checks for header files 
AC_HEADER_STDC 
AC_CHECK_HEADERS([stdlib.h time.h math.h sys/stat.h errno.h unistd.h fcntl.h signal.h]) 

# Checks for library functions 
AC_FUNC_FORK 
AC_CHECK_FUNCS([time localtime mktime gmtime exit fork chdir atol signal]) 
AC_FUNC_STRFTIME 

それは多くのautotoolsのプロジェクトは、私の知る限りを行うものです。

コンパイラが既に必要なヘッダファイルをチェックしていて、リンカがライブラリ関数をチェックしているにもかかわらず、私のコードではコンフィグレーションステージでこれらのチェックを行う必要があり、#ifdef HAVE_FOOBARなどのコンパイルフラグを正しく設定する必要があります。

この場合、CMakeでヘッダー/関数をチェックするベストプラクティスは何ですか?

答えて

10

あなたは簡単にポートに直接CHECK_FUNCTION_EXISTSCHECK_INCLUDE_FILECHECK_TYPE_SIZEなどでもいくつかのアドバイスのためのCMake_HowToDoPlatformChecksを見ることができます。このスタイルで設定


(すなわち、あなたがucontext.hsetjmp.hをチェックし、1つの存在を使用し、#ifdef HAVE_UCONTEXTまたは#ifdef HAVE_SETJMPであなたのコードを変更することができます)移植性を追加します。

さらに、アプリケーションを配布するときに、コンパイルエラー(ユーザー用)を避け、優れたビルドシステムを使用したい場合は、アプリケーションを配布する前にアーキテクチャの違いの大部分を処理できます。

"プログラマがgtk +ヘッダのチェックに失敗した"場合は、同じことを言っているがほとんどの場合読み込みができないコンパイルエラー行のブッチを持つのではなく、gtkをインストールする必要があるそのうち:

関連する問題