كيفية التحقق من الملفات رأس وظائف مكتبة في CMake مثل ان يتم ذلك في Autotools؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

وأنا تحويل حاليا مشروع C صغيرة من autotools ل<أ href = على "HTTP : //en.wikipedia.org/wiki/Cmake "يختلط =" noreferrer "> 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 AFAIK.

وعلى الرغم من أن المترجم يتحقق بالفعل عن الملفات رأس اللازمة والشيكات رابط لوظائف مكتبة، قانون بلدي لا تزال بحاجة إلى هذه الشيكات القيام به في مرحلة تكوين لصحيح الإعداد انها تجميع الأعلام ل#ifdef HAVE_FOOBAR على حد سواء.

في هذه الحالة، ما هو أفضل الممارسات للتحقق من رؤوس / وظائف مع CMake؟

هل كانت مفيدة؟

المحلول

ويمكنك بسهولة أن ميناء مباشرة مع CHECK_FUNCTION_EXISTS ، CHECK_INCLUDE_FILE و <لأ href = "HTTP : //www.cmake.org/cmake/help/cmake2.6docs.html#module: CheckTypeSize "يختلط =" نوفولو noreferrer "> CHECK_TYPE_SIZE ، الخ انظر أيضا <لأ href =" HTTPS: // gitlab .kitware.com / cmake / المجتمع / الويكي / وثيقة / الدروس / كيف لكتابة منصة الشيكات "يختلط =" نوفولو noreferrer "> CMake_HowToDoPlatformChecks للحصول على بعض النصائح.


وتكوين في هذا النمط يضيف قابلية (أي يمكنك التحقق من ucontext.h وsetjmp.h واستخدام الوقت الحاضر واحدة، وتعديل التعليمات البرمجية الخاصة بك مع #ifdef HAVE_UCONTEXT أو #ifdef HAVE_SETJMP).

وعلاوة على ذلك، عند توزيع التطبيق الخاص بك، فإنك ترغب في تجنب تجميع خطأ (للمستخدمين)، وبالتالي مع نظام بناء جيد، يمكنك التعامل مع معظم الخلافات العمارة قبل توزيع التطبيق.

وانه من الاسهل لغير مبرمج لفهم أنه إذا "تحقق لجتك + رأس - فشل"، لديهم لتثبيت جتك، بدلا من وجود بوخ خطوط الخطأ ترجمة أن أقول نفس الشيء، ولكن لا يمكن قراءتها لأكثر من منها:)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top