0

次の手順を含むこのメイクファイル ターゲットがあります。

...
cd $(GRAPHICS_BUILD_DIR)
clang++ -c -I$(SFML_HEADERS) $(GRAPHICS_DIR)/*.cpp
cd $(BASE_DIR)
...

何らかの理由で、Clang はビルド ファイルをBASE_DIRではなくに出力しますGRAPHICS_BUILD_DIR。すべてが正常にコンパイルされ、一度に 1 行ずつ手動で実行すると正常に動作し、*.oファイルは正しいディレクトリに出力されます。

make がこれらのファイルを正しいディレクトリに置かないのはなぜですか? どうすれば強制的に入れられますか?

私はclang3.1とubuntu Linuxカーネル3.2.0-26でGNUMakeの現在のバージョンを使用しています。

4

1 に答える 1

3

問題は、Makeルールでは、各コマンドが独自のサブシェルで実行されることです。ある行から次の行まで何も記憶されていません。したがって、最初のコマンドはで始まり、$(BASE_DIR)に移動して$(GRAPHICS_BUILD_DIR)、終了します。2番目のコマンドはで始まり、$(BASE_DIR)そこでClangを実行します。

これを試して:

...
cd $(GRAPHICS_BUILD_DIR) ; clang++ -c -I$(SFML_HEADERS) $(GRAPHICS_DIR)/*.cpp
...
于 2012-07-02T21:59:29.557 に答える