Makefile kullanmaya çalışıyorum, benim bir sorunum var, bir src
dizini ve bir Makefile
. Ayrıca oluşturmam gereken bir tmp
dizinini de kullanıyorum. İçinde nesne dosyaları var. Ve performans için hata ayıklama yaparken bunları silmemeye çalışıyorum. Bunu oluşturmak için tmp için bir kural oluşturursam, her zaman C dosyalarını yeniden oluşturur. Peki bu nasıl yapılır?Gerektiğinde dizin nasıl oluşturulur?
cevap
Bazı yollar vardır. Kullanmakta olduğunuz hangi sürüme ve hangi işletim sistemine kullandığınıza bağlıdır.
ASLA yapmamanız gereken tek şey bir dizini basit bir ön koşul olarak kullanmaktır. Dosya sisteminin değiştirilen zamanı dizinlerde güncellemek için kullandığı kurallar make
ile iyi çalışmaz. Bir POSIX sisteminde basit make
için
, sen derleme gerçekleştirmek üzere kuralda dizin ön oluşturabilirsiniz:
obj/foo.o: foo.c
@ mdkir -p obj
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o [email protected] $<
GNU'yu varsa
iki seçeneğiniz var olun. En basit bir sadece bu gibi bir satır ekleyerek makefile başka bir şey olmadan önce okunduğunda dizin oluşturulacak zorlamaktır:_dummy := $(shell mkdir -p obj)
kolay, hızlı ve güvenilirdir. Tek dezavantajı, gerekli olmasa bile dizinin her zaman oluşturulacağıdır. Yine de, genelde böyle yaparım.
obj/foo.o: foo.c | obj
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o [email protected] $<
obj:
mkdir -p [email protected]
Bu, obj
hedef obj/foo.o
hedefin önce inşa edilecek ama zorlar: Eğer GNU yapmak, yeni bir yeterince varsa
en süslü şekilde, sipariş yalnızca önkoşulları kullanmaktır obj
zaman damgası, obj/foo.o
'un güncel olup olmadığını belirlerken yoksayılır.
GNU uzantıları olmadan bunu yapmanın bir yolu var mı? (Soru "GNUmakefile" değil, "Makefile" olarak etiketlenmiştir). – jww
Hayır, POSIX uyumlu makefile yazarken bir dizinin önkoşul olarak kullanılması (istenildiği gibi davranması) mümkün değildir. Yapabileceğiniz tek şey, var olmayan bir dizini kullanmaya başlamadan önce açık bir 'mkdir -p 'eklemek için tüm kurallarınızı yeniden yazmanız, önkoşulları kullanmamaları veya dizini oluşturmak için kurallar yapmalarıdır. – MadScientist
- 1. sql server: gerektiğinde yabancı anahtarlarda dizin oluşturulsun
- 2. Golang'da bir dizin nasıl oluşturulur?
- 3. Karıncada geçici dizin nasıl oluşturulur?
- 4. Plunker'da nasıl bir dizin oluşturulur?
- 5. Dosya nasıl bir dizin oluşturulur?
- 6. Java'nın LinkedList, gerektiğinde geri (dizin) almak için optimize edilmiş mi?
- 7. Gerektiğinde bir OperationContract parametresi nasıl belirtilir
- 8. Gerektiğinde 'http: //' protokolünü bir url'ye nasıl ekleyebilirim?
- 9. Gerektiğinde yeniden girilebilen girişler nasıl yapılır
- 10. MongoDB'de iç içe geçmiş bir dizin nasıl oluşturulur?
- 11. Node.js içinde şu anki dizinde bir dizin nasıl oluşturulur
- 12. Bir PDF dosyasının sonunda bir dizin nasıl oluşturulur?
- 13. Kullanıcı yetkilendirmesinden sonra dizin/dizin yolu modeli kancası nasıl çağırılır?
- 14. HttpRequest.Content.IsMimeMultipartContent(), true olması gerektiğinde false döndürüyor
- 15. PHP'de sanal dizinler nasıl oluşturulur?
- 16. 2 kez kullanmam gerektiğinde kapalı bir InputStream'i nasıl yeniden açabilirim
- 17. Gerektiğinde CSS ve JS dosyalarını HTTPS aracılığıyla nasıl ekleyebilirim?
- 18. Haskell - System.Process şifre gerektiğinde bir hata veriyor
- 19. viewchild girdi özelliği gerektiğinde güncelleştirilemedi açısal 2
- 20. Genel dizin nasıl alınır?
- 21. ArangoDB FOXX içinde bir dizin nasıl tanımlanır?
- 22. Motorda 2dsphere endeksi nasıl oluşturulur.
- 23. Dizin
- 24. Dizin
- 25. Jasmine'in SpecRunner.html'sine dayanan LCOV raporu nasıl oluşturulur?
- 26. Oluşturma dizininde src dizini nasıl oluşturulur?
- 27. Git dizin sınırlayıcı nasıl değiştirilir?
- 28. Dizin dizinli arayüzünü nasıl kullanılır?
- 29. Harici dizin android nasıl okunur?
- 30. Impdp'de dizin dumpfile nasıl değiştirilir?
Olası çoğaltılabilir [Yapım dosyasını kullanarak dizin oluşturma] (http://stackoverflow.com/questions/1950926/create-directories-using-make-file) – SimplyKnownAsG