2011-09-13 16 views
0

ここには簡単なメイクファイルがあります。メイクファイルに関する質問

私は2つの質問を持っています。

  1. すべて:$(SOURCES)$(実行可能) なぜSOURCEを依存関係に置くのですか?
  2. ".cpp.o:":

    CC=g++ 
    
    CFLAGS=-c -Wall 
    
    LDFLAGS= 
    
    SOURCES=main.cpp hello.cpp factorial.cpp 
    
    OBJECTS=$(SOURCES:.cpp=.o) 
    
    EXECUTABLE=hello 
    
    
    all: $(SOURCES) $(EXECUTABLE) 
    
    $(EXECUTABLE): $(OBJECTS) 
    
        $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 
    
    .cpp.o: 
    
        $(CC) $(CFLAGS) $< -o [email protected] 
    
+0

SOURCEは、依存関係として含まれていない場合 - その後、ソースファイルを変更した後、「すべての作る」を実行すると、再コンパイルされていない実行可能になります。 – dave

+1

.cpp.o:は、拡張子が.cppのファイルを後続のコマンドを実行してファイルの.oバージョンに変換できる古いスタイルのサフィックスルールです。 GNU make OLD-FASHIONED SUFFIXルールに関する詳細な情報は、http://www.gnu.org/software/make/manual/make.html#Suffix-Rules – dave

答えて

1

$(SOURCES)allの依存性が必要かさえ有用ではありません ".cppファイルの.o" を はなぜ書かないで。依存関係情報は、実行可能ファイルがオブジェクトファイルに依存し、オブジェクトファイルがソースファイルに依存するようにする必要があります。

表記:

.cpp.o: 

make扱うコンパイルルールの元の(第7版UNIX™)バージョン方法でした。 GNUメイク(およびSunください)ができるように%表記を使用:

%.o: %.cpp 

基本的に、それは振り返ってみると、設計時に意味を判断し、多分あまり意味でした。それは最も厄介な問題ではありませんでした(それはコマンドラインの先頭にあります)。

+0

にあります。タブ以外の問題は何ですか?時々それらを忘れるために新しい? – eriktous

+0

他のほとんどの場所は、空白の内容について無関係です。さらに、AFAICTという便利なサービスはほとんど提供していません。 'makefile'のパーサーは、コマンドラインの始めに任意の空白を許せば、それほど難しくありません。したがって、実際には必要ないユーザー(特に初心者ユーザー)にとって障害となります。 –