在我的CMake构建系统中,我自动生成一个头文件。以前,我正在做这样的事情
// old_auto_gen_file.hpp
#define VERSION_STRING "@VERSION_STRING@"
#define VERSION_MAJOR @VERSION_MAJOR@
通过CMake填充@...@
。
如果可能,我想丢失#define
。我在想这样的事情
// new_auto_gen_file.hpp
static const std::string VERSION_STRING("@VERSION_STRING@");
static const int VERSION_MAJOR(@VERSION_MAJOR@);
然而,如果这是合法的,我会感到非常困惑吗?用c ++ 11这很酷吗?
答案 0 :(得分:1)
这没有什么不妥,除非我没有看到任何理由甚至打扰char
的小开销。一个简单的static const char VERSION_STRING[]="@VERSION_STRING@";
static const int VERSION_MAJOR=@VERSION_MAJOR@;
数组就足够了:
rm -rf ///Trash://*
答案 1 :(得分:0)
取决于你的工具链,你可能会得到const的多个实例,否则链接器可能足够聪明地做"合并字符串"。
无论哪种方式,这应该对您的代码没有明显的影响。但我建议将字符串放在c / cpp文件中,并在标题中包含extern参考,作为副作用,您只需要在更改时重新编译一个小文件。