2015-09-14 3 views
0

У меня есть исходные файлы .c; они на самом деле являются библиотекой, предоставляемой другими. Когда я создаю свою программу для использования этой библиотеки, я должен снова скомпилировать эти файлы. Я не могу скомпилировать файлы в статическую библиотеку, потому что источники содержат некоторые препроцессорные флаги. Мне нужно создать много статических библиотек с различным составом флагов препроцессора.Есть ли способ сделать предварительную обработку при связывании статических библиотек?

Итак, есть ли какой-либо метод, который я могу создать статическую библиотеку, и выбрать, какие флаги препроцессора должны использоваться при связывании с этой библиотекой?

+0

Как сказал Маттео с исходным кодом, он должен создавать отдельные библиотеки, будь то статические или общие, для каждой комбинации флагов препроцессора. Почему вам так часто нужны разные наборы препроцессорных флагов? Возможно, библиотека должна быть более конфигурируемой во время выполнения, а не быть настроенной исключительно во время компиляции. Тогда у вас может быть одна библиотека, и вы сможете использовать ее во всех ваших программах. –

+0

На самом деле, я врожденный парень. Я должен выбрать флаги препроцессора, когда компилирую для разных процессоров. Мне нужно изменить параметры '-D' в флагах командной строки' gcc', а затем снова скомпилировать источники. Это займет некоторое время. Поэтому я блуждаю хорошим способом сэкономить время компиляции. –

+0

Если вам нужны разные флаги для разных процессоров, нет возможности избежать перекомпиляции кода. Код, скомпилированный для одного типа процессора, не будет работать на других - если только процессоры не совместимы, как у семейства Intel. Поэтому вам придется перестраивать библиотеку практически независимо. –

ответ

1

Nope; статическая библиотека представляет собой набор объектных модулей, этап компиляции, где в последнее время нужно что-то менять, кроме ссылок.

Если вам нужно иметь разные варианты сборки для каждого проекта, просто создайте библиотеку вместе с проектом, который в ней нуждается; статические библиотеки редко стоят усилий в любом случае.

+0

Вы имеете в виду, что я должен создать статическую библиотеку для каждой композиции флагов препроцессора. Затем создайте большую библиотеку, чем все из них? Но как я могу связать конкретную библиотеку? –

+0

Нет. Я имею в виду, что в такой ситуации вы должны ставить статические библиотеки и просто строить свою зависимость вместе с каждым вашим проектом. –

0

Нет, вы не можете. Вам понадобится исходный код. В c компиляции можно выполнить три основных этапа: от источника до исполняемого.

Source-> Preprocessor-> Компиляция в Object Файлы-> Linking-> Исполняемые

Статические библиотеки вроде как объектные файлы. Они уже были скомпилированы и предварительно обработаны до этого. Статические библиотеки используются компоновщиком для создания окончательного исполняемого файла.

+0

Я понимаю, что вы сказали. Просто я хочу найти какой-нибудь странный способ нарушить правило. –

Смежные вопросы