Belows實踐Makefile非常簡單的代碼。
藍框是源代碼,紅框是Makefile。
我不知道哪一個是正確的寫Makefile btn上面的Makefile或者Bottm Makefile的方法。是的,我想知道「頭文件(helpMe.h)的依賴性」。謝謝。 哪一個是編寫Makefile的正確方法?
回答
你確實需要.h
在目標文件規則,因爲在頭文件的改變,你想重新編譯過程的,所以這是一個Makefile
是需要照顧的是
CC = gcc
LDFLAGS =
CFLAGS = -Wall -Werror -std=c99 -pedantic
OBJ = helpMe.o
executable-name: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) $(OBJ) -o [email protected]
%.o: %.c %.h
$(CC) -c $(CFLAGS) $<
clean:
@rm -fv *.o executable-name
和你如你所願只需添加文件到$(OBJ)
變量的名稱,這樣
CC = gcc
LDFLAGS =
CFLAGS = -Wall -Werror -std=c99 -pedantic
OBJ = helpMe.o HeaderTest.o
executable-name: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) $(OBJ) -o [email protected]
%.o: %.c %.h
$(CC) -c $(CFLAGS) $<
clean:
@rm -fv *.o executable-name
這是行不通的,因爲'helpMe.o'實際上並不依賴於'helpMe.h','HeaderTest.o'也不依賴於'HeaderTest.h'。只有'HeaderTest.o'依賴於'helpMe.h',而不依賴於'HeaderTest.h',因爲它不存在。 – 2015-02-23 21:13:30
@RossRidge你所說的一切並不重要,如果你觸摸HeaderTest.h'然後運行'make',那麼目標將被更新,因爲該文件已被創建,所以它是一個依賴項,如果它被忽略不存在,那麼你怎麼看?此外,它不是一對一的依賴性事物,如果任何文件發生變化,整個事情都會得到更新。 – 2015-02-23 23:32:42
'HeaderTest.h'不存在,'touch HeaderTest.h'會不必要地將它創建爲一個空文件。你的makefile確實在每個'.o'文件和'.c'和'.h'文件之間建立了一個一對一的依賴關係。這是你的錯誤。如果'helpMe.h'發生變化,那麼makefile將不會根據需要重新生成'HeaderTest.o'。相反,即使'helpMe.c'實際上不包含'helpMe.h',它也會不必要地重建'helpMe.o'。你似乎不明白你的makefile實際上做了什麼,也不明白原始海報的問題。 – 2015-02-23 23:49:48
- 1. Xhtml寫URL,哪一個是正確的?
- 2. 用RxAndroidBle編寫多個特徵的正確方法是什麼?
- 3. 哪一個更重要:寫正確的代碼還是寫正確的代碼?
- 4. 編寫一個方法isMultiple確定
- 5. 編寫此條件的正確方法
- 6. 哪一個是正確的使用方法「arc4rand()」
- 7. 哪一個是用FactoryGirl別名屬性的正確方法?
- 8. 哪兩種方法是正確的?
- 9. 如何正確編寫「viewDidLoad」方法
- 10. 什麼是編寫wordpress的nginx配置的正確方法?
- 11. 這是正確的方式,包括一個subdir在一個makefile中
- 12. 這是編寫Haskell foldr函數的正確方法嗎?
- 13. 這是在Python中編寫POST函數的正確方法嗎?
- 14. 編寫此更新聲明的正確方法是什麼?
- 15. 這是在MINA中編寫ProtocolDecoder的正確方法嗎?
- 16. 在GSP中編寫此文件的正確方法是什麼?
- 17. 在python中編寫syslog函數的正確方法是什麼?
- 18. 什麼是編寫Sass函數的正確方法?
- 19. 寫這個增量的正確方法
- 20. 哪個編寫scala方法最好?
- 21. 在Ruby方法中編寫括號的正確方法?
- 22. 用Makefile創建庫文件的正確方法是什麼? [C]
- 23. 編寫JQuery是否正確
- 24. Java MD5哪一個是正確的?
- 25. 是否可以編寫一個創建方法的方法?
- 26. Java:編寫泛型HashMap合併方法的正確方法是什麼?
- 27. 在Android NDK中編寫本機方法簽名的正確方法是什麼?
- 28. 哪個是在一個項目中添加Jquery和Angularjs的正確方法
- 29. 哪個是在PHP中使用PDO的正確方法?
- 30. 哪個是檢查Null異常的正確方法?
兩者都是錯誤可以加目標文件,因爲你可以寫一個''%的.o: ''規則並使其成爲通用的,而不是爲每個源文件編寫一個規則,當然你希望在頭部改變時重新編譯,所以真正的問題是什麼? – 2015-02-23 12:37:12
什麼?爲什麼.. T_T。目標是創建helpMe.o和HeaderTest.o – user3595632 2015-02-23 12:38:37
現在,但是如果您想要編譯更多的源文件呢? – 2015-02-23 12:39:07