我試圖使用makefile,我的問題是我有一個目錄,src
目錄和Makefile
。我也使用tmp
目錄,我還必須創建。 它有它的目標文件。爲了提高性能,我在調試時儘量不要刪除這些內容。 如果我爲tmp創建一個規則來創建它,它總是會重建所有的C文件。 那麼如何做到這一點?如何根據需要創建目錄?
回答
有很多方法。這取決於您使用的是什麼版本的make
以及您正在使用的操作系統。
你絕不能做的一件事就是使用一個目錄作爲一個簡單的先決條件。文件系統用於更新目錄上修改時間的規則與make
不一致。
對於簡單make
一個POSIX系統上,你可以在規則中預先創建的目錄,進行編譯:
obj/foo.o: foo.c
@ mdkir -p obj
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o [email protected] $<
如果你有GNU讓你有兩個選擇。最簡單的一個是簡單地迫使時之前什麼都發生在讀取makefile文件被創建的目錄,加入這樣一行:
_dummy := $(shell mkdir -p obj)
的是方便,快捷,可靠。它唯一的缺點是即使不需要,該目錄也會始終創建。儘管如此,我通常這樣做。
最奇特的方式,如果你有一個新的,足夠的GNU製作,是使用訂單僅先決條件:
obj/foo.o: foo.c | obj
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o [email protected] $<
obj:
mkdir -p [email protected]
這迫使obj
目標到obj/foo.o
目標之前將建成但在確定obj/foo.o
是否過期時,會忽略obj
上的時間戳。
有沒有辦法做到這一點沒有GNU make extensions? (這個問題被標記爲'Makefile',而不是'GNUmakefile')。 – jww 2018-02-05 10:50:21
不,在編寫符合POSIX標準的makefile時,沒有辦法將目錄用作先決條件(因此它的行爲如所期望的那樣)。你可以做的唯一的事情就是在你試圖使用一個可能不存在的目錄之前,重寫所有你的規則添加到一個明確的'mkdir -p'中,而不是使用先決條件或者制定規則來構建目錄。 – MadScientist 2018-02-05 13:26:00
- 1. 複製文件,根據需要在Ruby中創建目錄
- 2. 在maven中需要時創建目錄
- 3. ln -s創建需要目錄
- 4. 如何讓log4j只根據需要創建日誌文件?
- 5. 如何創建一個根據需要垂直擴展的UITextView?
- 6. 如何在需要時創建中間目錄?
- 7. 多租戶 - 預先創建表或根據需要創建表?
- 8. 需要創建一個腳本,從CSV創建目錄結構
- 9. 用Java創建文件的方法,如果需要創建目錄?
- 10. 如何根據我創建
- 11. 如果根據字符串不存在,創建一個目錄?
- 12. 如何根據需要加載模塊?
- 13. 我需要根據ifStatement的結果創建一個列表
- 14. MVC根據需要創建對象的接口的模式/庫
- 15. 如何根據動態需要動態/無限制地創建UIImageViews?
- 16. 如何根據需要創建儘可能多的嵌套循環?
- 17. 創建數據目錄
- 18. Android。如何在內部存儲器的根目錄下創建一個目錄
- 19. 如何在cpanel的根目錄中創建來自magento的目錄?
- 20. 如何根目錄
- 21. 如何需要來自子目錄
- 22. PHP項目需要在www根目錄中放置 - 如何使用.htaccess修復?
- 23. 如何創建從子目錄到根域的重定向?
- 24. 如何在根目錄下創建一個文件夾Android
- 25. 根據這個月創建一個目錄並將目錄移動到它
- 26. Xen和Linux無法在根目錄下創建目錄
- 27. 需要與創建inital JAX-WS項目
- 28. 創建目錄並保存現有目錄中的文本文件,除非需要創建它
- 29. Gruntjs:如何根據目錄創建一個連接文件的任務
- 30. 根據文本文件名創建目錄名稱
可能使用[使用make文件創建目錄]的副本(http://stackoverflow.com/questions/1950926/create-directories-using-make-file) – SimplyKnownAsG 2016-12-14 22:49:09