Я хотел бы реализовать многопроцессорное приложение, которое разделяет между собой основной (или вообще можно сказать, файл .cpp
).
Позволь мне объяснить. Учитывая структуру dir что-то вроде этого:
- main.cpp
-- app1
--- app1.cpp
--- app1.h
-- app2
--- app2.cpp
--- app2.h
-- ...
Я хотел бы скомпилировать приложение N с тем же main.cpp
, но с другим заголовком. Скажем, что-то вроде этого:
app1 := main.cpp + app1.cpp
app2 := main.cpp + app2.cpp
Как псевдокод, main.cpp
должен выглядеть так, но я не знаю, как я могу присвоить динамический заголовок:
# main.cpp
foreach sub_dir
# create a main with only the headers in this subdir
foreach headers_in_subdirs
<include "sub_dir/header.h">
end
# rest of the main omitted
Возможным решением является копирование main.cpp
в каждом поддире, но таким образом код не поддерживается. Перегруппировка всех субпаппов в большой, к сожалению, невозможна для цели приложения.
Компиляция не является проблемой (я делаю это с запросом одиночных команд в makefile
), но возникает вопрос: как я могу динамически назначать заголовки?
Вы можете передать заданный макрос компилятору, чтобы выбрать, какие заголовки включать:
#if APP == 1
#include "something_1"
#include "something_else_1"
#elif APP == 2
#include "something_2"
#include "something_else_2"
#else
#error No such app
#endif
Или, если вы собрали нужные заголовки под одним файлом, вы можете предварительно определить имя самого заголовка.
Количество возможных решений здесь, поэтому вам нужно выбрать то, что вам больше нравится, объективный анализ в этом случае довольно сложный. Я бы сделал что-то вроде этого:
Сделайте свое основное приложение-агностиком, например
# main.cpp
<include "header.h">
# rest of the main omitted
Поместите разные версии файлов "header.h" в каждый поддиректор. Теперь сгенерируйте (часть) makefile, указав параметры приложения, например, какие файлы.cpp для компиляции и что включает каталог ("app1", "app2" и т.д.), Поэтому компилятор может найти соответствующий "header.h". Может быть сделано Bash или Python или что-то еще. Или просто makefile, если ваш набор приложений стабилен.
#ifdefine ... include libs .. #elseif ...
вmain.cpp
и затем определите уникальную переменную в каждом подкаталоге. Как вы думаете, это должно работать?