我的问题的简短版本
我想使用 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 它应该像对待 .cpp 文件一样对待 .hpp 文件吗?
我为什么要这个
我将 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 当然不会突出显示文件中实际发生的错误。