![](/img/trans.png)
[英]SCons out of source build only works for executable program, not for object files
[英]Scons: build header file with Object builder
我想使用Scons编译.hpp文件,为此我使用以下目标:
env.Object('file.o', 'file.hpp')
使用此目标运行Scons会出现以下错误:
Don't know how to build from a source file with suffix `.hpp'. Expected a suffix in this list: [...]
我能以某种方式告诉Scons它应该处理.hpp文件,因为它会处理.cpp文件吗?
我将emacs与flymake( http://flymake.sourceforge.net/ )一起使用,它基本上在后台调用特定的make目标,解析输出并在编辑器中突出显示错误和警告。 但是,我想使用Scons作为构建系统而不是make。 要使用flymake,我有一个Makefile,其中包含一个只调用Scons的目标:
SCONS_TARGETS = $(CHK_SOURCES:=.syntax_target)
check-syntax:
LANG=en scons mode=syntax $(SCONS_TARGETS)
在SContruct文件中,我有类似以下内容的语法检查:
### checking syntax (for flymake)
if (mode == 'syntax'):
env.Append(CCFLAGS = ['-fsyntax-only'])
for target in COMMAND_LINE_TARGETS:
env.Object(target,
target.replace('.syntax_target', ''))
这适用于我的源(.cpp)文件,但它不适用于标题(.hpp)文件,我得到上面提到的错误。
我已经提出了明显的“解决方案”,只需将需要检查的头文件复制到带有后缀.cpp的文件中,并对此文件进行语法检查。 这种方法存在编译器输出新文件的错误的问题,因此flymake当然不会突出显示实际发生的文件中的错误。
更新您的flymake部分如下:
### checking syntax (for flymake)
if (mode == 'syntax'):
import SCons.Tool
static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
static_obj.add_action('.hpp', SCons.Defaults.CXXAction)
shared_obj.add_action('.hpp', SCons.Defaults.ShCXXAction)
static_obj.add_emitter('.hpp', SCons.Defaults.StaticObjectEmitter)
shared_obj.add_emitter('.hpp', SCons.Defaults.SharedObjectEmitter)
env.Append(CCFLAGS = ['-fsyntax-only'])
for target in COMMAND_LINE_TARGETS:
env.Object(target,
target.replace('.syntax_target', ''))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.