Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > одна функция под разными именами в makefile'е


Автор: _hunter 21.7.2008, 10:36
Добрый день.

Помогите с такой проблемой. Делаю студийный проект из makefile'а. Там есть такие:
Код

tcpmainfunc$(OBJSUFFICS): proxy.h proxymain.c
    $(CC) $(COUT)tcpmainfunc$(OBJSUFFICS) $(CFLAGS) $(DEFINEOPTION)MODULEMAINFUNC=tcpmainfunc proxymain.c

udpmainfunc$(OBJSUFFICS): proxy.h proxymain.c
    $(CC) $(COUT)udpmainfunc$(OBJSUFFICS) $(CFLAGS) $(DEFINEOPTION)MODULEMAINFUNC=udpmainfunc $(DEFINEOPTION)UDP proxymain.c

строчки. Т.е. один модуль собирается дважды, но одна из его функций в объектниках имеет разные имена.
Можно, конечно из proxymain.c сделать proxymain_tcp.c и proxymain_udp.c но держать копию файла (и помнить что файл после правки нужно незабыть бы скопировать) как-то не хочется...
Есть ли другой метод?

С уважением...

Автор: xvr 21.7.2008, 11:58
Цитата(_hunter @ 21.7.2008,  10:36)
Добрый день.

Помогите с такой проблемой. Делаю студийный проект из makefile'а. Там есть такие:
Код

tcpmainfunc$(OBJSUFFICS): proxy.h proxymain.c
    $(CC) $(COUT)tcpmainfunc$(OBJSUFFICS) $(CFLAGS) $(DEFINEOPTION)MODULEMAINFUNC=tcpmainfunc proxymain.c

udpmainfunc$(OBJSUFFICS): proxy.h proxymain.c
    $(CC) $(COUT)udpmainfunc$(OBJSUFFICS) $(CFLAGS) $(DEFINEOPTION)MODULEMAINFUNC=udpmainfunc $(DEFINEOPTION)UDP proxymain.c

строчки. Т.е. один модуль собирается дважды, но одна из его функций в объектниках имеет разные имена.
Можно, конечно из proxymain.c сделать proxymain_tcp.c и proxymain_udp.c но держать копию файла (и помнить что файл после правки нужно незабыть бы скопировать) как-то не хочется...
Есть ли другой метод?

С уважением...

Сделать 2 модуля, которые будут состоять из необходимых #define'ов (разных) и одного #include'а (одинакового) с файлом оригинального модуля. Оригинальный модуль при этом вообще исключается из компиляции.

Автор: _hunter 21.7.2008, 13:19
так тело функции не заинклюдится вроде... или я чего-то не понял?
есть функция:
Код

int MODULEMAINFUNC ()
{
    return 1;
}

как ее в два разных модуля затянуть?

Автор: jonie 21.7.2008, 15:13
#include "file.cpp" тоже будет работать.
а #define в рамках одного модуля (до инсклюда) решит проблему двойных имен.

но по мне так проще изменить название этой функции и сделать два декоратора для нее.

Автор: _hunter 22.7.2008, 11:28
я тут еще подумал -- по-идее смысл этого шаманства в том, чтобы для каждого "метода использования" иметь свои глобальные (для модуля) переменные. т.е. просто "затаскивание" функции нужного эффекта не даст...
поэтому возникает вопрос -- можно ли как-то повлиять на компилятор? -- т.е. таки заставить его собирать один модуль два раза.
или проще тупо сделать копию модуля и забыть о всем этом геморрое?

Автор: vinter 22.7.2008, 12:25
Цитата(_hunter @  22.7.2008,  12:28 Найти цитируемый пост)
проще тупо сделать копию модуля и забыть о всем этом геморрое


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)