Autotoolsで行われているように、CMakeでヘッダーファイルとライブラリ関数をチェックする方法は?

StackOverflow https://stackoverflow.com/questions/647892

  •  22-07-2019
  •  | 
  •  

質問

現在、小さなCプロジェクトを autotools から CMake

古い configure.in では、次の行を使用してすべてのヘッダーとライブラリ関数の存在を確認しました:

# 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 のコンパイルフラグを適切に設定するために、configureステージでこれらのチェックを行う必要がありますなど。

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

役に立ちましたか?

解決

CHECK_FUNCTION_EXISTSを使用すると、簡単に直接移植できます。 CHECK_INCLUDE_FILE CHECK_TYPE_SIZE など。 CMake_HowToDoPlatformChecks を参照してください。


このスタイルで設定すると、移植性が追加されます(つまり、 ucontext.h および setjmp.h を確認し、存在するものを使用して、#でコードを変更できます。 ifdef HAVE_UCONTEXT または #ifdef HAVE_SETJMP )。

さらに、アプリケーションを配布するとき、コンパイルエラー(ユーザー向け)を避けたいため、適切なビルドシステムで、アプリケーションを配布する前にアーキテクチャの違いのほとんどを処理できます。

「プログラマー以外の人にとっては、「gtk +ヘッダーの確認-失敗」の場合、同じことを言っているがほとんどの人には読めないコンパイルエラー行がたくさんあるのではなく、gtkをインストールする必要があることを理解する方が簡単ですそれらの:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top