2017-10-17 31 views
0

Makefileのインストール部分を書いていますが、プロジェクトがビルドされているかどうか確認したいと思います。そのためには、特定のディレクトリが存在するかどうかを確認したいのですが、そうでない場合は適切なエラー(「すべてを最初に実行してください」など)で失敗します。Makefile - ディレクトリが存在しない場合に失敗する - クロスプラットフォーム

また、このMakefileをLinux、Windows(mingw)、MacOSで動作させたいと思っています。

誰もがこれを手伝ってくれますか?

答えて

3

...私は同じことを少し短く、少し混乱したバージョンである、としてもこれを投稿しようと思いましたmakeのうちorder-only prerequisitesをサポートしていますが、自然な解決策があります。これらのディレクトリは、インストール先の注文専用の前提条件として宣言してください。

install: | $(DIRS) 
    <install recipe> 

$(DIRS): 
    @echo "please run make all first" && exit 1 
1

あなたはmingwのが作る使用している場合は、その答えは、すべてのプラットフォームで同じであるsholud:我々はテストが失敗した場合にメッセージを印刷するか、演算子を使用した最初のディレクトリの場合には

dirs-exist: 
     test -d dir1 || echo Run make install first && exit 2 
     test -d dir2 

。しかし、メッセージを正常に印刷したにもかかわらず、行全体が失敗するので、エラーコード2で終了します。 すべての場合にメッセージを表示する場合は、上記のロジックを各ディレクトリに適用できます。あなたは、ディレクトリの多くを持っている場合は、以下のようなループでは、Windows上のnmakeとCMDで動作するように、これを必要な場合にのみ、複雑さは次のようになり

test_dirs: 
    for d in dir1 dir2; do if test \! -d $$d; then echo run make install first; exit 2; fi 

働くかもしれません。それは問題ではないような音がここにあります。

+0

ありがとうございます!これらのディレクトリのいずれかが存在しない場合、どのようにエラーメッセージを出力できますか? – fx23

+0

私はエコーとエグジットの周りに括弧が必要だと思う(オペレータの声明のため)... – HardcoreHenry

1

@ SamHarmanの答えは正しいです(彼は以前に投稿しました)ので、彼の最初の例を修正するとすぐに彼の答えを受け入れるべきです。あなたはGNU作るか、またはバージョンを使用している場合はいずれにせよ、私は:-)

DIRS=dir1 dir2 dir3 

checkdirs: 
     [[ 1 ${DIRS:%= && -d %} ]] || (echo "uh oh..." && false); 

.PHONY: checkdirs 
関連する問題