我有一长串常量,我需要访问几个不同语言的项目(Verilog,C,C ++和C#)。不是用每种语言重复它们,有没有一种很好的方式来分享这些?
我唯一能想到的是文本文件和预处理脚本? 这是最好的解决方案还是有更容易/更优雅的东西?
答案 0 :(得分:9)
自动更新代码中的常量的预处理脚本可能是最好的方法。使用您的项目提交代码以确保正确性并将其作为构建脚本的一部分。
答案 1 :(得分:6)
您可以将它们保存在XML文档中,并为每种语言编写XSLT脚本,以在每个构建中生成相应的源文件。
答案 2 :(得分:1)
您可以使用makefile(或等效的)来定义这些常量吗?对于C和C ++。您可以使用编译器的CLI选项来定义常量的预处理器值。我没有为Verilog做过多的构建定制,但我怀疑那里也可能存在类似的东西。
答案 3 :(得分:1)
您可以以
的形式编写一个简单的文件const1 = value1
const2 = value2
const3 = value3
然后对c:
应用类似的东西 s/\([a-zA-Z][a-zA-Z1-9_]*\)[ \t]*=[ \t]*\(.*\)/#define \1 \2/
值得注意的是,您可能需要指定类型,因为并非所有语言都允许您使用不关心类型的前准备器宏。
或者,您可以在Flex / Bison中创建词法分析器/解析器来解析配置文件。这将更清晰,更容易扩展。
答案 4 :(得分:0)
您可能有一个XML
文件,其中包含要共享的常量,并使用每种语言对其进行解析。
答案 5 :(得分:0)
对于verilog(至少对于系统verilog)和c ++,你可以将所有常量描述为一个列表(假设所有常量都是相同的类型),如下所示:
a=0, b= 1, c = 2, ..;
在c ++中你会使用
const int
#include <myconsts>
在verilog中(至少在系统verilog中)你可以使用这个
parameter int
`include "myconsts"
我猜c#没有包含。所以,你需要一个pre-pcocessing脚本,至少要在类中包含你的常量。您可能可以使用'cpp'来实现此目的。对不起,对c#不太了解。
实际上,为了使所有类似的我可能会使用cpp来生成我需要的文件:
#ifdef CPP
const int
#elsif VERILOG
parameter int
#elsif CSHARP
class Constants {
const int
#endif
a = 0,
c = 1,
d = 2;
#ifdef(CSHARP)
};
#endif