سؤال

أنا أبني بعض الاختبارات باستخدام CTEST. عادة ، يمكنني إعداد الاختبار ببساطة الخط:

ADD_TEST(Test_Name executable args)

ومع ذلك ، لقد واجهت مشكلة ، لدي بعض الاختبارات التي تتطلب تشغيل أمران من أجل العمل ، هل هناك أي طريقة يمكنني من خلالها تشغيل برنامجين داخل CTEST واحد ، أو أنا مطلوب لإنشاء جديد اختبار لكل؟

شكرًا لك.

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

المحلول

ال add_test يقبل الأمر فقط قابلاً للتنفيذ ، ولكن يمكنك تشغيل أي شيء قابل للتنفيذ هو بالفعل نص. للقيام بذلك بطريقة منصة متقاطعة ، اكتب البرنامج النصي في Cmake نفسه. Cmake لديه -P خيار تشغيل أجزاء تعسفية للغة البرمجة النصية Cmake عند التشغيل make أو make test, ، بدلا من وقت توليد جعل.

للأسف لا يمكنك نقل الحجج إلى مثل هذا النص. ولكن يمكنك ضبط المتغيرات على القيم ، وهو أمر جيد.

هذا البرنامج النصي الذي يمكنك الاتصال به runtests.cmake, ، يقوم بتشغيل الأوامر CMD1 و CMD2 ويتحقق لكل منهما من رمز إرجاع غير صفري ، ويعود من Cmake نفسه بخطأ إذا حدث ذلك:

macro(EXEC_CHECK CMD)
    execute_process(COMMAND ${CMD} RESULT_VARIABLE CMD_RESULT)
    if(CMD_RESULT)
        message(FATAL_ERROR "Error running ${CMD}")
    endif()
endmacro()
exec_check(${CMD1})
exec_check(${CMD2})

... ثم أضف حالات الاختبار مثل ذلك:

add_executable(test1 test1.c)
add_executable(test2 test2.c)
add_test(NAME test
    COMMAND ${CMAKE_COMMAND}
            -DCMD1=$<TARGET_FILE:test1>
            -DCMD2=$<TARGET_FILE:test2>
    -P ${CMAKE_CURRENT_SOURCE_DIR}/runtests.cmake)

$<TARGET_FILE:test1> يتم توسيعها إلى المسار الكامل إلى القابل للتنفيذ في وقت إنشاء ملف الإنشاء. عند الركض make test أو ما يعادله سيقوم هذا بتشغيل "Cmake -P Runtests.cmake" تعيين متغيرات CMD1 و CMD2 إلى برامج الاختبار المناسبة. سيقوم البرنامج النصي بعد ذلك بتنفيذ برنامجك 2 بالتسلسل. في حالة فشل أي من برامج الاختبار ، فشل الاختبار بأكمله. إذا كنت بحاجة إلى رؤية إخراج الاختبار ، فيمكنك التشغيل make test ARGS=-V

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