私はこのファイルに変更を加えた後でのみ、一部の.makファイルに対してinclude
を実行したいと私が取り組んでいる大きなプロジェクトを持っていますオリジナルのメイクファイルの中のコマンドを使って大規模なプロジェクトなので、コードを書くのは難しいでしょうから、代わりにこのばかげた例を挙げてみましょう。makefile:特定の操作を行った後に.makファイルにインクルードする
Cプロジェクトとヘッダファイルが同じディレクトリにあり、書く必要がある小さなCプロジェクトがありますメークファイル。私は書き込みするメイクファイルにclean
ルールを使用することはできませんが、メイクファイルに含めることができるfile.mak
という名前のファイルがあります。 file.mak
の内容:
.PHONY: clean
cleam:
$(RM) $(objs) test
問題ここでは、ルールがcleam
ないclean
であるということです。私も手動でfile.mak
を変更することは許されていませんが、私は元のmakefileの中のコマンドでこれを行うことができます。
CC = gcc
srcs = $(wildcard ./*.c)
objs = $(srcs:.c=.o)
test: $(objs) change_file include_file
$(CC) $^ -o [email protected]
%.o: %.c
$(CC) -c $< -o [email protected]
change_file:
$(shell sed -i 's/cleam/clean/g' file.mak)
include_file: change_file
include file.mak
しかし、私は次のエラーを取得する:だから私はこのようにメイクファイルを書くことを考え
sed -i 's/cleam/clean/g' file.mak
:
include: Command not found
だから私はそれが理解これはで簡単に行うことができますルールの中にincludeを使用することの問題です、それで私が望むものを達成する方法はありますか?
:固定バージョン(コピー)を作成することを検討(偽ルールを必要とせずに)、より堅牢な代替手段として
をして、これを含める:それはこのようになります。 makeと同じくらいよく書かれていて、最終的にはツールが低すぎるので、CMakeのようなツールでmakefileを生成することを提案します。彼らは信頼性が高く、予測可能なほど長く使用されています。私見では。 –
GNU makeで**独自のビルドシステム**のみ**を使用していますが、私はこれに同意しません:)しかし、学習量は正しく、柔軟にGNU makeを使用するためにたくさんあることを認めなければなりません。より簡単に追加ツールを使うことができます...ちょうどIMHOはGNUのautotoolsから離れてください。それ以外の場合はあなたの髪がゆるむかもしれません:) –
autotoolsの問題は、一度あなたがautotoolsを激しく動かすと、あなたの時間の多くを食べる、それはすべてのautotoolsを使用しています。 私にとって、それは単純なものになります。 「自分のビルドシステム」は、そのアプローチに正反対です。 あなたがそれをやっているなら、あなたはあなたの顧客/雇用者にあなたにそれをさせるように納得させました。ただ、明確にしておきましょう。それは彼らの最大の関心事ではありません。 (あなたがscons、cmake、またはそれらの新しいもののようなオープンプロジェクトの著者でない限り、私はその名前を覚えていない) –