Здравствуйте!
Никогда активно не работал с пространствами имен, а тут, видимо, придется. В ближайшее время нужно будет мне срастить два проекта (~25Mb кода в каждом). То есть, было две программы, а теперь надыть, чтобы были они были обе в одном бинарнике. Программы написаны в смешанном структорно-объектном стиле.
Проблема в том, что программы используют одинаковые библиотеки (15 штук в виде исходников), но библиотеки дефайнами в разных программах настраиваются немного по-разному.
Проекты пока разделены, и библиотеки пока имеют такую структуру
some_library.h
#ifndef _SOME_LIBRARY_H_
#define _SOME_LIBRARY_H_
include "prog1_config.h" // Чтобы были известны define-настройки и типы 1-й проги
... прототипы ....
#endif // _SOME_LIBRARY_H_
some_library.cpp
#include "some_library.h"
extern int a;
extern char b[];
... реализация ...
Пока проекты разделены, и чтобы использовать библиотеку из 1-го проекта во втором, копируется её h и cpp файлы, в h-файле меняется
include "prog1_config.h"
include "prog2_config.h"
А при сращивании имеем проблемы...
Первая проблема - extern переменные. Её можно было бы решить, если в сращиваемой версии библиотеки задать нужный namespace. Но тогда нужно, чтобы код библиотеки включался два раза - первый раз с namespace для программы 1, второй раз с namespace для программы 2.
Вторая проблема - разные настройки prog1_config.h и prog2_config.h. Настройки там задаются дефайнами. Дефайны имеют, само собой, одинаковые имена в prog1_config.h и в prog2_config.h. Я туплю в документацию, и немогу понять будут ли дефайны разные для разных пространств имен? Что-то мне подсказывает, что дефайны от пространства имен никак не зависят, так как это отдельный «язык разметки». А значит, нужно как-то гарантировать, чтобы дефайн-настройки 1-й программы применились к 1-й программе, а настройки 2-й ко 2-й. Как это сделать?
Третья проблема - общая для первых двух. Надо каким-то образом включить namespace1 и подключить prog1_config.h и скомпилить библиотеку, а затем включить namespace2 и подключить prog2_config.h и скомпилить библиотеку. Как это сделать?
Все это желательно сделать средствами синтаксиса C/C++, внешние скрипты очень нежелательны.
Вопрос - какие могут быть решения, чтоб срастить две подобные программы?