1

私の質問の短いバージョン

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 はもちろん、実際に発生したファイル内のエラーを強調表示しません。

4

1 に答える 1