0

次のような Makefile がある場合

server : network.o storage.o logic.o
    ld network.o storage.o logic.o -o server

network.o : network.c netdefs.h
    cc -c -o network.o network.c

storage.o : storage.c defs.h
    cc -c -o storage.o storage.c

logic.o : logic.c defs.h
    cc -c -o logic.o logic.c

.PHONY : promote clean reallyclean

promote : server
    cp server /staging/new_servers

clean : 
    rm -f *.o

reallyclean : clean
    rm -f server

そして、次の一連のコマンドを実行します

make server # builds ther server from source
make clean  # tidies up the .o files
make promote # send the built server to the staging area

当然のことながら、.o ファイルはサーバーの依存関係であり、欠落しているため、make はサーバーを最初から再構築します。

サーバーファイル自体が存在しない場合はこれが発生することを望みますが(それ以外の場合は昇格するものは何もありません)、サーバーがあり、.oファイルがない場合は、サーバーが最新であると仮定するようにmakeしますそしてそれを促進すること。

これは達成可能ですか?

4

1 に答える 1

0

あ、わかった!

.SECONDARY または .INTERMEDIATE を使用して、無視するすべての中間体をマークします。たとえば、次を追加します。

.SECONDARY : network.o storage.o logic.o

(私はこれらを試しましたが、私の実際の解決策では、無視されていない中間に依存する無視された中間があったため、make は無視されたと思われる中間をまだ再構築していたため、サーバーを再構築していました。)

于 2013-01-29T16:55:18.127 に答える