C ++ динамически назначать заголовки

0

Я хотел бы реализовать многопроцессорное приложение, которое разделяет между собой основной (или вообще можно сказать, файл .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), но возникает вопрос: как я могу динамически назначать заголовки?

  • 1
    будет ли запуск инструмента, подобного этому, в каждом разделе subdir? (я не использовал его) hwaci.com/sw/mkhdr/makeheaders.html
  • 0
    хороший момент @Джимми, этот инструмент дал мне идею. Что вы думаете об игре с #ifdefine ... include libs .. #elseif ... в main.cpp и затем определите уникальную переменную в каждом подкаталоге. Как вы думаете, это должно работать?
Показать ещё 1 комментарий
Теги:
header-files
dynamically-generated

2 ответа

3
Лучший ответ

Вы можете передать заданный макрос компилятору, чтобы выбрать, какие заголовки включать:

#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

Или, если вы собрали нужные заголовки под одним файлом, вы можете предварительно определить имя самого заголовка.

  • 0
    +1 спасибо @ user2079303 Я следовал вашему решению!
1

Количество возможных решений здесь, поэтому вам нужно выбрать то, что вам больше нравится, объективный анализ в этом случае довольно сложный. Я бы сделал что-то вроде этого:

Сделайте свое основное приложение-агностиком, например

# main.cpp
<include "header.h">
# rest of the main omitted

Поместите разные версии файлов "header.h" в каждый поддиректор. Теперь сгенерируйте (часть) makefile, указав параметры приложения, например, какие файлы.cpp для компиляции и что включает каталог ("app1", "app2" и т.д.), Поэтому компилятор может найти соответствующий "header.h". Может быть сделано Bash или Python или что-то еще. Или просто makefile, если ваш набор приложений стабилен.

  • 0
    +1, если бы я мог принять два решения, я приму даже ваше, я думаю, что этот способ - еще один крутой вариант для решения моей проблемы (но когда я попробовал ваше решение, я столкнулся с тайной «пропавшего заголовка»;)). В любом случае, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню