GPRBuild не компилирует файлы C

#c #ada #gnat #gprbuild

#c #ada #gnat #gprbuild

Вопрос:

Я обновился до GNAT Community 2018 (с GNAT GPL 2017 все работало нормально). У меня есть этот файл проекта:

 with "opengl";

library project OpenGL.Soil is
   for Library_Name use "SoilAda";

   for Languages use ("ada", "c");

   for Source_Dirs use ("src/soil");

   -- snip compiler config
end OpenGL.Soil;
  

Теперь в src/soil есть пара файлов .ads и .adb , а также файлы .h and .c . Ранее этот файл проекта компилировал их все и просто связывал вместе при использовании. Начиная с GNAT Community 2018, этот файл компилирует только исходные тексты Ada, а не исходные тексты C.

Вещи, которые я пробовал:

  • Убедитесь, что GCC, поставляемый с GNAT Community, по-прежнему поддерживает компиляцию C. Да, это так.
  • Явно определенная Naming настройка пакета Spec_Suffix и Implementation_Suffix для C для соответствующих окончаний файлов.
  • Явно указано Source_Files и поместите в него все файлы Ada и C.

Что бы я ни делал, GPRBuild при вызове не будет компилировать файлы C (что приводит к ошибкам компоновщика). В отношении файлов C не выводится ошибка или предупреждение, даже если они явно указаны.

Как я могу заставить GPRBuild снова скомпилировать файлы C?

Ответ №1:

Причина заключалась в том, что все еще оставались 32-битные объектные файлы от предыдущего компилятора. GPRBuild не перекомпилировал их, но также не пытался связать их (что привело бы к неудаче), вызвав gprclean -r проект и скомпилировав его снова, исправил это.

Комментарии:

1. Еще одна забавная проблема заключается в наличии разных блоков в зависимости от настроек переменной сценария; gprclean не удалит объекты, которых не было бы в текущем сценарии. rm .build/*

2. @SimonWright Чтобы обойти это, я указываю уникальный каталог объектов для каждой переменной сценария.