私は最近、CMUのOS設計コースでこれらのコード行を含むmakefileを閲覧しました。
$(TEST_PROGS) tests/verify_test: %: %.o libtraceback.a
$(CC) -o $@ $@.o -L. libtraceback.a $(CFLAGS) $(LDFLAGS) $(LIBS) -static
python ./symtabgen.py $@
ここで「%:」が何を意味するのかわかりません。TEST_PROGS変数には、リストtraceback / traceback_globals.o traceback/traceback.oが含まれています
libtraceback.aを作成するには、traceback / traceback_globals.o traceback/traceback.oが必要です。
%.oを削除して遊んでみました。そうすることで、TEST_PROGSオブジェクトのコンパイルが停止しました
%を削除しますが、%。oを保持すると、いくつかの警告が表示され、何もコンパイルされませんでした。
誰かがここでmakefileの構文に光を当てることができることを願っています。グーグルですばやく検索すると、%:は二次拡張に関連していることがわかりました。しかし、私が見ているこのコードでは、特別なターゲット.SECONDEXPANSIONは定義されていません。
助けてください、このコードは私の脳を傷つけます...