Выбор другого файла заголовка в зависимости от инструкций из Makefile - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь реорганизовать чей-то код, и я, кажется, врезался в стену.У меня есть функция int fnc() в fnc.c, которая вызывается либо main1.c, либо main2.c.Исполняемый файл компилируется из main1.c или main2.c с использованием файла makefile:

main1: main1.o fnc.o
    gcc main1.o fnc.o -o main1.x

main2: main2.o fnc.o
    gcc main2.o fnc.o -o main2.x

main1.o: main1.c
    gcc -c main1.c

main2.o: main2.c
    gcc -c main2.c

fnc.o:
    gcc -c fnc.c

Единственная проблема заключается в том, что в преамбулу включаются два заголовочных файла header1.h и header2.hfnc.c в зависимости от того, скомпилирован ли main1.x или main2.x :

#include "header1.h"

int fnc(){
    // do stuff
}

Можно ли выбрать заголовок для загрузки в зависимости от того, какой тип make main1 илиmake main2

1 Ответ

0 голосов
/ 30 мая 2018

Вы можете использовать флаг компилятора -D, чтобы определить символ, который будет виден препроцессору.А затем проверить это с помощью директивы препроцессора #ifdef.Например:

Makefile:

main1: main1.o fnc1.o
    gcc main1.o fnc1.o -o main1.x

main2: main2.o fnc2.o
    gcc main2.o fnc2.o -o main2.x

main1.o: main1.c
    gcc -c main1.c

main2.o: main2.c
    gcc -c main2.c

fnc1.o:
    gcc -o fnc1.o -c fnc.c -DCONFIG1

fnc2.o:
    gcc -o fnc2.o -c fnc.c -DCONFIG2

И ваш источник:

#ifdef CONFIG1
#include "header1.h"
#elif defined(CONFIG2)
#include "header2.h"
#else
#error "blah"
#endif

int fnc(){
    // do stuff
}
  • Примечание - это ни проверенное, ни оптимальное решение.Просто даю идею
...