2014-10-21 3 views
0

Я хотел бы реализовать многопроцессорное приложение, разделяющее между собой основное (или вообще можно сказать, файл .cpp).C++ динамически назначать заголовки

Позвольте мне объяснить. Учитывая структуру реж что-то вроде этого:

- 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

будет запускать такой инструмент в каждом поддиректоре? (я его не использовал) http://www.hwaci.com/sw/mkhdr/makeheaders.html – Jimmy

+0

хороший момент @ Jimmy, этот инструмент дал мне идею. Что вы думаете об игре с '' '#ifdefine ... include libs .. #elseif ...' '' в '' 'main.cpp''', а затем задаете уникальную переменную в каждом поддиректории. Как вы думаете, как это работает? – damoiser

+0

думаю, что это по существу один из ваших ответов ниже – Jimmy

ответ

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 Я следил за вашим решением! – damoiser

1

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

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

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

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

+0

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

Смежные вопросы