2015-06-01 3 views
3

Я работаю над проектом команды с использованием teensy и matlab и избегаю различий в версии (например, один человек загружает teensy с версией A, а человек, который теперь использует его с matlab, имеет версию B из код), я бы хотел отправить строку версии для спаривания.Включить строку в файл при компиляции

Однако, я хочу, чтобы строка версии сидела в общем файле между кодом matlab и teensy, и каждый раз, когда программа загружается в teensy, включите ее в компиляцию как константу.

Вроде как:

const string version = "<included file content>"; 

MATLAB со своей стороны, может читать его во время выполнения.

Я думал об использовании файла, содержимое которого является назначением переменной, чье имя является общим как teensy, так и matlab, однако я бы предпочел более элегантное решение, если такое существует, особенно тот, который не включает в себя выполнение кода из внешний файл во время выполнения.

+0

Для уточнения, в '' "' вы ищете имя или содержимое файла? – Levi

+1

Содержимое, это строка версии кода, такая как «1.0.0rc1» – nadavge

+0

, которую вы можете рассмотреть -Dblahblah в gcc – paykoob

ответ

4

Одним из способов является просто иметь простой установки, как так:

version.inc:

"1.0.0rc1"; 

main.cpp:

const string version = 
#include "version.inc" 

... 

Обратите внимание, что перевод строки между = и #include на месте, чтобы компилятор был счастлив. Кроме того, если вы не хотите включать точку с запятой в файле .inc, вы можете сделать это:

main.cpp:

const string version = 
#include "version.inc" 
; // Put the semicolon on a newline, again to keep the compiler happy 


EDIT: Вместо .inc файла, вы можете реально есть любое расширение файла, которое вы желаете. Это все по вкусу


EDIT: Если вы действительно хотите, вы можете опустить кавычки из файла .inc, но это привело бы к грязному коду, как это:

version.inc:

STRINGIFY(
    1.0.0rc1 
); 

main.cpp:

#define STRINGIFY(X) #X 

const string version = 
#include "version.inc" 
... 


EDIT:

Как отметил @ Ôrel, вы можете обрабатывать генерацию version.h или подобное в вашем файле Makefile. Предполагая, что вы используете систему * NIX, вы можете попробовать настройки, как это:

Makefile:

... 
# "1.0.0rc1"; > version.h 
echo \"`cat version.inc`\"\; > version.h 
... 

version.inc:

1.0.0rc1 

основной.cpp:

const string version = 
#include "version.h" 
+1

@WojciechFrohmberg OP запросил ввод как константу компиляции: «' ... и каждый раз, когда программа загружается в teensy, включила ли она в компиляцию как константу' ". Кажется, вы прочитали только часть вопроса. OP запрашивает, чтобы файл был включен во время выполнения на стороне matlab. – Levi

+1

. Вы правы, я пропустил это. –

+0

Я считал это, есть ли способ получить его без кавычек? – nadavge