在编译时在文件中包含字符串

时间:2015-06-01 10:21:19

标签: c++ c compilation arduino

我使用teensy和matlab处理团队项目,并避免版本差异(例如,一个人加载版本A的青少年,现在使用它与matlab的人有代码的版本B) ,我想在配对时发送一个版本字符串。

但是,我希望版本字符串位于matlab代码和teensy之间的共享文件中,并且每次将程序加载到teensy时,都将其作为常量包含在编译中。

类似:

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

matlab可以在运行时读取它。

我想过使用一个文件,其内容是一个名称由teensy和matlab共享的变量的赋值,但是如果存在这样的话,我宁愿选择更优雅的解决方案,特别是那些不包含执行代码的解决方案。来自运行时的外部文件。

1 个答案:

答案 0 :(得分: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

<小时/> 编辑:您可以真正拥有所需的任何文件扩展名,而不是.inc文件。这一切都取决于

<小时/> 编辑:如果你真的想,你可以省略.inc文件中的引号,但这会导致像这样的混乱代码:

version.inc:

STRINGIFY(
    1.0.0rc1
);

main.cpp中:

#define STRINGIFY(X) #X

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

<小时/> 编辑:

正如@Ôrel所指出的那样,你可以在Makefile中处理version.h或类似代码的生成。假设您正在运行* nix系统,您可以尝试这样的设置:

生成文件:

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

version.inc:

1.0.0rc1

main.cpp中:

const string version = 
#include "version.h"