Bazı "giriş" -dizinlerinde derlemek ve farklı "çıktı" -dizinleri koymak istediğim bazı kaynak dosyalarım olduğunu varsayalım. Çıktı dizinlerini hesaplamak için tek yapmanız gereken giriş dizinlerini almak ve obj
ve x/y/x
ile src
'u u/v/w
(çift dize değiştirme) ile değiştirmektir.Gnu-make, giriş dizinini aldıktan sonra ve bunun üzerine birden çok dize değiştirmesi uyguladıktan sonra bir dizin yoluna dosyalar derlemek için nasıl kullanılır?
:
soruma Şimdig++ -c src/a/x/y/z/b/c/file1.cpp -o obj/a/u/v/w/b/c/file1.o
g++ -c src/a/x/y/z/b/c/file2.cpp -o obj/a/u/v/w/b/c/file2.o
g++ -c src/b/x/y/z/c/d/file3.cpp -o obj/b/u/v/w/c/d/file3.o
:
Sana Make GNU içinde bir "kök" konulu bir tek dize değişiklik% kullanabileceğinizi biliyor, ama ne olsaydı çoklu ikameler yapmak için? Bunu nasıl yaptın?
Olası GNU Makefile: desen kural başına
Dediğiniz gibifound_files := $(shell find src -type f -name '*.cpp')
all: $(found_files)
obj/%/x/y/z/%.o: src/%/u/v/w/%.cpp <---- GNU Make will not let me use multiple % here
$(CXX) -c -o [email protected] $<
Bunun çözüm olarak göründüğü somut bir probleminiz var mı? –
Evet, bunun çözüm olarak göründüğü somut bir problemim var. Tam olarak neden bu kadar sıkıntı verici detaylarla sizi sıkmadan açıklamakta zorlanıyorum. Ürünle çalışıyorum. Üretim kodu cmake kullanılarak oluşturulmuşken, test kodu gnu make kullanılarak oluşturulmuştur. Sadece gnu make build sisteminin kontrolü var. Üretim kodunun bir parçası, bir kod oluşturmaktır. Ne yazık ki cmake, kaldırmak istediğim oluşturulan kod yoluna "CMakeFiles" (x/y/z ile karşılaştırılabilir) ekler. Dahil yol temizse oluşturulan başlık dosyalarını eklemek daha kolaydır. –