0
ソースファイル名のリストがsources.txtというテキストファイルにあります。 Makefileので、私はsources.txtからname
として、すべてのファイル名を読み、次の行を含め、Makefileのループ付きメイクファイル
name.o: name.c name.h Makefile
$(CC) $(CFLAGS) -c name.c
したいと思います。私はMakefileの作成を試みました。 source/sources.txt
CFLAGS = -Wall -std=c99
CC = gcc
sourcesfile="source/sources.txt"
# Read every source file name.
# Produce the corresponding .c, .h and .o extension versions.
# Then add a file in the makefile as:
# name.o: name.c name.h Makefile
# $(CC) $(CFLAGS) -c name.c
# If the line has main, handle that case separately -- there is no mention of main.h
while IFS= read -r line; do
cfile=$(echo source/${line}.c)
hfile=$(echo source/${line}.h)
ofile=$(echo source/${line}.o)
ofiles=ofiles+$(ofile)
if [[ $line == main ]] ; then
$(ofile): $(cfile) Makefile
$(CC) $(CFLAGS) -c $(cfile)
else
$(ofile): $(cfile) $(hfile) Makefile
$(CC) $(CFLAGS) -c $(cfile)
fi
done < "$sourcesfile"
genetics:$(ofiles)
$(CC) $(CFLAGS) -o genetics $(ofiles)
clean:
$(RM) $(ofiles)
は、Cソースファイルのが、.c
拡張子なしの名前が含まれているテキストファイルです。私はmake
を使用して上記のMakefileを実行すると例えば、
main
file1
file2
file3
file4
file5
は、それが次のエラーを生成します。
Makefile:19: *** commands commence before first target. Stop.
誰もが、このようなMakefileを構築するために私を助けていただけますか?実際の例があれば、これは非常に高く評価されます。
あなたがメイクファイルでシェルスクリプトを混合していますか?メイクファイルには非常に特殊な構文があります。依存関係を 'sources.txt'に追加したいと思うようですが、それを簡単にする他の解決法があります。 – Zeta
どちらの 'make 'を使っていますか?これは従来のUNIX makeでは不可能でしたが、GNU makeでは可能です。 –
ファイル名ごとに別々のルールを設定してもよろしいですか?静的なパターンルールでは十分ではないでしょうか? – Beta