C++ Scons:使用对象生成器生成头文件 我问题的简短版本

C++ Scons:使用对象生成器生成头文件 我问题的简短版本,c++,emacs,scons,flymake,C++,Emacs,Scons,Flymake,我想使用SCON编译.hpp文件,为此,我使用以下目标: env.Object('file.o', 'file.hpp') 使用此目标运行SCON时会出现以下错误: Don't know how to build from a source file with suffix `.hpp'. Expected a suffix in this list: [...] 我能告诉Scons它应该像对待.cpp文件一样对待.hpp文件吗 我为什么要这个 我将emacs与flymake()结合使用,

我想使用SCON编译.hpp文件,为此,我使用以下目标:

env.Object('file.o', 'file.hpp')
使用此目标运行SCON时会出现以下错误:

Don't know how to build from a source file with suffix `.hpp'.  Expected a suffix in this list: [...]
我能告诉Scons它应该像对待.cpp文件一样对待.hpp文件吗

我为什么要这个 我将emacs与flymake()结合使用,flymake()基本上在后台调用特定的make目标,解析输出并在编辑器中突出显示错误和警告。但是,我希望使用SCON作为构建系统,而不是生成。要使用flymake,我有一个Makefile,其中包含一个只调用SCON的目标:

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', ''))

很好,谢谢。是否有包含此类信息的文档?