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

标签 c++ c compilation arduino

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

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

有点像:

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

matlab 可以在运行时读取它。

我想过使用一个文件,其内容是对一个变量的赋值,该变量的名称由 teensy 和 matlab 共享,但是如果存在这样的解决方案,我更喜欢更优雅的解决方案,尤其是不包括从运行时的外部文件。

最佳答案

一种方法就是像这样进行简单的设置:

版本.inc:

"1.0.0rc1";

主要.cpp:

const string version = 
#include "version.inc"

...

注意 =#include 之间的换行符是为了让编译器满意。此外,如果您不想在 .inc 文件中包含分号,您可以这样做:

主要.cpp:

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


编辑:代替 .inc 文件,您真的可以拥有您想要的任何文件扩展名。这一切都取决于口味


编辑:如果你真的想要,你可以省略 .inc 文件中的引号,但这会导致像这样的困惑代码:

版本.inc:

STRINGIFY(
    1.0.0rc1
);

主要.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
...

版本.inc:

1.0.0rc1

主要.cpp:

const string version = 
#include "version.h"

关于c++ - 编译时在文件中包含字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30571009/

相关文章:

c++ - 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

c - UNIX shell I/O 重定向

c++ - 如何在 Windows 7 上编译 ASL(基于 boost 的 Adob​​e C++ gui 库)?

c++ - 赋值 int x = 'abc' ;

c++ - 将单元格分配给 3 x 3 网格中的坐标

C++ 模板类自引用

java - 编译 PrimeFaces 1.1

c++ - 将新的 shared_pt 对象分配给 a[1] , a[1] 中包含的原始对象的引用计数减少。如何?

c - 使用 C 在 OS X 中获取其他进程的 argv

c++ - constexpr 函数中的编译时类型生成