سؤال

وأنا أحاول أن استخدام رنة لمحة مشروع أعمل على. ويشتمل المشروع على مكتبة ثابتة كبيرة بدلا من أن يتم تضمينها في كسكودي ك تبعية.

وأود حقا رنة لعدم تحليل ملفات التبعيات، كما يبدو لجعل رنة تفشل. هل هذا ممكن؟ لقد تم قراءة الوثائق رنة، وأنا لا يمكن العثور عليه.

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

المحلول 2

وهكذا، وهذا ليس حقا جوابا، لكنه يعمل جيدا بما فيه الكفاية.

ما انتهى بي الأمر القيام تم بناء مكتبة ثابتة في وقت مبكر، ومن ثم بناء المشروع باستخدام المسح والبناء. ولما كان هناك بالفعل بناء ما يصل إلى تاريخ مكتبة ثابتة، لم يكن بناؤه، وبالتالي لم يكن الممسوحة ضوئيا.

وأنا لا زلت أحب أن يكون الجواب الحقيقي لهذا، وإن كان.

نصائح أخرى

وكملاذ أخير، هناك خيار القوة الغاشمة.

وهذا إضافة إلى بداية الملف:

// Omit from static analysis.
#ifndef __clang_analyzer__

وهذا إضافة إلى النهاية:

#endif // not __clang_analyzer__

وورنة سوف --analyze لا ترى محتويات الملف.

وإشارة: السيطرة ثابت محلل تشخيص

وأنا لا أستعمل كسكودي، ولكن باستخدام المسح والبناء في لينكس الأعمال التالية بالنسبة لي. أنا حالتي، وأنا أريد لتشغيل تحليل ثابت على كل طرف الأول، رمز غير الذي تم إنشاؤه. ومع ذلك، أريد أن تجنب تشغيل على THIRD_PARTY رمز والشفرة التي تم إنشاؤها.

في سطر الأوامر، يتم التوصيل رنة محلل في بناء عند المسح والبناء ويحدد المتغيرات CC والبيئة CXX لمجلس التعاون الجمركي محلل وج ++ - أماكن محلل. كتبت اثنين من النصوص بسيطة تسمى ccc-analyzer.py وج ++ - analyzer.py والتوصيل لهم في لترجمة بدلا من الافتراضي. في هذه النصوص المجمع، نظرت ببساطة في مسار الملف يجري تجميع ثم قم بتشغيل إما مترجم الخام مباشرة (إذا كنت ترغب في تجنب تحليل ثابت) أو (ج) * -analyzer (إذا كنت ترغب في تحليل ثابت أن يحدث). بلدي السيناريو هو في بيثون وتعادل لنظام بلدي بنية معينة، ولكن على سبيل المثال يحتاج تعديل:

import subprocess
import sys

def main(argv):
  is_third_party_code = False
  for i in range(len(argv)):
    arg = argv[i]
    if arg == '-c':
      file_to_compile = argv[i + 1]
      if '/third_party/' in file_to_compile or \
            file_to_compile.startswith('gen/'):
        is_third_party_code = True
      break
  if is_third_party_code:
    argv[0] = '/samegoal/bin/clang++'
  else:
    argv[0] = '/samegoal/scan-build/c++-analyzer'
  return subprocess.call(argv)

if __name__ == '__main__':
  sys.exit(main(sys.argv))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top