gprbuild将外部信息输入源代码

问题描述 投票:0回答:2

我试图让gprbuild在我的源代码中自动设置一些变量的值 - 不管怎样。特别是我希望可以从代码中访问某些命令的输出。在带有Makefile的C中,这很简单:

资源:

#include <stdio.h>
int main() { printf("%s\n", COMMAND_OUTPUT); return 0; }

使:

result : source.c
    $(CC) -DCOMMAND_OUTPUT=`command -with -options`

但是我不知道如何用gprbuild和Ada做这样的事情。 (没有抛弃gprbuild而只是使用make - 但我更喜欢gprbuild)

ada gnat
2个回答
2
投票

我通过在构建之前从makefile生成Ada文件来解决这个问题。

一个例子:

HG_STATE_SOURCE     = src/mercurial.ads
HG_MODIFIER         = `test $$(hg status | wc -c || echo 0) -gt 0 && echo "plus changes" || echo "as committed"`
HG_REVISION         = `hg tip --template '{node}' 2>/dev/null || echo N/A_____________________________________`

[...]

$(HG_STATE_SOURCE): Makefile $(REPOSITORY_CONFIG) $(REPOSITORY_STATE) $(PROJECT_ROOT_SOURCE)
    @mkdir -p src
    @echo 'package 'Mercurial is'                                >  $(HG_STATE_SOURCE)
    @echo '   Revision : constant String (1 .. 53) :='           >> $(HG_STATE_SOURCE)
    @echo '                "'$(HG_REVISION)' '$(HG_MODIFIER)'";' >> $(HG_STATE_SOURCE)
    @echo 'end 'Mercurial;'                                      >> $(HG_STATE_SOURCE)

2
投票

Ada不使用像C这样的预处理器。你不能指望Ada编译器修改代码中的字符串。使用这种内联编辑很容易违反Ada强类型,这很难诊断,并且对源代码静态分析完全不可见。

© www.soinside.com 2019 - 2024. All rights reserved.