Построение двух образов с использованием другого каталога включения

#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 для поиска источников.