繁体   English   中英

Scons:使用“对象”构建器构建头文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM