アセンブリファイルを生成するメイクファイル (gccを-Sフラグで呼び出す)を作成しようとしていて、生成されたs-ファイル を変更してコンパイルします。アプローチを見つけるために私は短いサンプル makefileを作って、.s-sourcefilesの名前を正確に(main.s、mod1.sなど)リストするとうまく動作します。gcc/make - アセンブリ(.s)ファイルを生成してコンパイルするための依存関係の定義方法?
objects = main.o mod1.o
assembly = main.s mod1.s
app : $(objects)
gcc -o app $(objects)
chmod +x app
%.s : %.c
gcc -S $<
# here some code will be called to modify
# the .s file for some experimental purpose ..
main.o : main.s
gcc -c main.s
mod1.o : mod1.s
gcc -c mod1.s
cleanobj :
rm app $(objects)
cleanass :
rm $(assembly)
cleanall : cleanobj cleanass
これは意図したとおりに動作します。 しかし、私はdependecy もう少し一般的な(「%はの.o:%の.S」)が定義するときときアセンブル(.S)ファイルが生成されていない 、それ以上:
objects = main.o mod1.o
assembly = main.s mod1.s
app : $(objects)
gcc -o app $(objects)
chmod +x app
%.s : %.c
gcc -S $<
# here some code will be called to modify
# the .s file for some experimental purpose ..
%.o : %.s
gcc -c $<
cleanobj :
rm app $(objects)
cleanass :
rm $(assembly)
cleanall : cleanobj cleanass
どれ説明すなわちアイデアどのようにこれらのステップを実装するには?
あなたの答えをありがとうが、これはうまくいきませんでした。これは、中間で削除されたファイルではなく、最初に生成されたファイルではありません。 ここに、最初のファイルの出力があります: gcc -S main.c gcc -c main.s gcc -S mod1.c gcc -c mod1.s gcc -o app main.o mod1.o と第2メークファイル: cc -c -o main.o main.c cc -c -o mod1.o mod1.c gcc -o app main.o mod1.o .s-filesはまったく私には生成されません。 – OliverJL
ええ、私は再校正することができました。 「前提条件が実際に存在するか言及されているルールは、他の暗黙ルールを連鎖することによって行わなければならない前提条件を持つルールよりも優先されます」([ここ](https://ftp.gnu.org)から) /old-gnu/Manuals/make-3.79.1/html_chapter/make_10.html))。したがって、あなたのルールは暗黙のルールによって上書きされます。暗黙のルールはmakeの '-r'フラグで無効にすることができます。 – yugr