首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不同目录下使用SCons lex builder

如何在不同目录下使用SCons lex builder
EN

Stack Overflow用户
提问于 2014-04-11 16:33:41
回答 1查看 339关注 0票数 0

我正在尝试使用SCons使用flex lexer构建一个复杂的应用程序。为了构建调试/发布版本,我使用了VariantDir()。

问题是我不能强制lex builder在variant构建目录中生成lexer头文件。这本身不是一个大问题,但它迫使SCons认为lexer总是过时的。

SConstruct内容:

代码语言:javascript
复制
VariantDir('build', '.', duplicate=0)
SConscript('build/SConscript')

SConscript内容:

代码语言:javascript
复制
env = Environment(LEXFLAGS='--header-file=scanner.h')
env.Program(target='scanner', source='scanner.l')

表示这个问题的完整源代码在这里:https://gist.github.com/g7r/4257f273715cadcf0d36

第一次运行scons.py --debug=explain时,我们得到了以下结果:

代码语言:javascript
复制
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
scons: building `build/scanner.c' because it doesn't exist
flex --header-file=scanner.h -t scanner.l > build/scanner.c
scons: building `build/scanner.o' because it doesn't exist
gcc -o build/scanner.o -c build/scanner.c
scons: building `build/scanner' because it doesn't exist
gcc -o build/scanner build/scanner.o
scons: done building targets.

第二次运行会得到以下结果:

代码语言:javascript
复制
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
scons: building `build/scanner.h' because it doesn't exist
flex --header-file=scanner.h -t scanner.l > build/scanner.c
scons: done building targets.

因此,第二次运行会重新构建lexer,因为scanner.h是在根目录而不是build目录中生成的。

我做错了什么吗?有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2014-04-11 19:28:11

考虑将对VariantDir()的调用与对SConscript()的调用结合起来,这通常会使构建脚本中的路径更直观。此外,我怀疑(不幸的是)对VariantDir()的调用会混淆SCons flex构建器。

下面是一个示例:

代码语言:javascript
复制
SConscript('SConscript', variant_dir='build', duplicate=0)

SCons user's guide的第14章和第15章很好地解释了SConscript()函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23007461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档