#c #makefile
#c #makefile
Вопрос:
Я ищу решение, которое позволит мне создать 2 разных изображения одного и того же исходного кода, используя разные значения констант, определенные в файлах заголовков, которые присутствуют в двух каталогах.
Чтобы было понятно, вот мое дерево каталогов :
program/
configuration1/
header1.h
header2.h
...
configuration2/
header1.h
header2.h
...
src/
All the source code common to both images
Я бы хотел, чтобы makefile автоматически создавал два изображения (называемые image1.out и image2.out), включая файлы соответственно из первого и второго каталога конфигурации.
Моя идея состояла в том, чтобы создать 2 разных правила и изменить CFLAGS между обоими. В первом CFLAGS включает "-I../configuration1"
, а во втором — включает "-I../configuration2"
. Но я прочитал это (https://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html ):
Имейте в виду, что данное предварительное условие будет создано не более одного раза за вызов make . Если один и тот же файл является обязательным условием для нескольких целевых объектов, и каждый из этих целевых объектов имеет разное значение для одной и той же целевой переменной, то первая цель, которая будет построена, приведет к созданию этого предварительного условия, и предварительное условие унаследует целевое значение от первого целевого объекта. Он будет игнорировать целевые значения для любых других целей.
Поэтому я не знаю, как принудительно перекомпилировать объекты в обоих правилах (потому что эти объекты будут зависеть от включенных заголовков, конечно …). Есть ли способ принудительно перестроить все во втором правиле?
Я работаю в среде Linux (Redhat) с использованием gcc.
Комментарии:
1. Я бы сделал это с двумя разными каталогами сборки, каждый со своим собственным Makefile, который
includes
является основным Makefile и добавляет дополнительныйCFLAGS
. ИспользуетсяVPATH
для поиска источников.