私の質問の短いバージョン
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 を使用するために、Scons を呼び出すだけの単一のターゲットを含む Makefile があります。
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 はもちろん、実際に発生したファイル内のエラーを強調表示しません。