**CLUB İçerisinde Paylaşım Yaparken Dikkat Edilmesi Gereken Önemli Hususlar.** - Paylaşım yaparken Türkçe kurallarına olabildiğince uyulması, sorunuzun rahat anlaşılması ve en hızlı cevabı almanız adına, dikkat edilmesi gereken en önemli husustur. - Paylaşımlarınız da kibar ve yalın bir dil kullanmanız ve gerekirse resim ile eklenti yapmanız, doğru ve hızlı cevap almak adına önemli hususlardır. - Paylaşımları olabildiğince uygun bölümlere açarak, konu ile ilgili kişilerin daha hızlı görmesini sağlamak adına çok önemlidir. - Paylaşımlarda etiket kullanmak o sorunun daha sonra tekrar aranması adına çok önemlidir.
0 beğenilme 0 beğenilmeme
218 kez görüntülendi
C kategorisinde (4,270 puan) tarafından
tarafından düzenlendi

bazı kaynaklarda görüyorum, derleme işlemini make vs yapılmasını istiyorlar nedir bu make ?

2 Cevaplar

2 beğenilme 0 beğenilmeme
(1,410 puan) tarafından
tarafından düzenlendi

Make oldukça eski bir derleme sistemi. Sistemin ana amaçlarından biri, büyük bir projede sadece değişiklik olmuş dosyaların derlenmesi ve bu şekilde derleme zamanının azalması.

Make, derleme işleminin hangi adımlardan oluşacağını belirlemek için bir çeşit bağımlılık sistemi kullanıyor. Programcı Makefile denen dosya içinde hangi çıktılar için hangi girdilerin gerektiğini, ve bu girdileri istenilen çıktıya dönüştürmek için hangi komutların çalıştırılması gerektiğini listeliyor.

Şahsi görüşüme göre, küçük projeler için faydalı olsa da, büyük projeler için Makefile yazmak uzmanlık isteyen zor bir iş ve pek çok püf noktası var. Hele bir de Autotools var ki işleri iyice karmaşıklaştırıyor. Autotools hesapta otomatik olarak Makefile oluşturmak için tasarlanmış (oluşturduğu Makefile'ların uzunluğu genelde 10k+ satır mertebesinde oluyor) ama kendisi başlı başına bir dert bence. Autotools genel olarak resmi GNU yazılımlarında kullanılıyor ve oldukça alışık olduğumuz ./configure betiğinin çalıştırılması ile başlayan kaynak koddan kurulum işlemi aslında Autotools'un bir ürünü.

Bence CMake gibi daha rahat kullanılan derleme sistemleri ile çalışmak daha mantıklı. Ayrıca, eğer ileride ROS (Robot Operating System) ile çalışılması gerekirse CMake'e aşinalık ROS'un kendi derleme sistemini öğrenirken de kolaylık sağlayacaktır (kendi sistemlerini CMake'ten türetmişler sanırım, ya da betikleri benzer).

1 beğenilme 0 beğenilmeme
(3,790 puan) tarafından

Diyelim ki Linux kullanicisi veya Windows uzerinde MinGW/CygWin kullanicisisiniz. Derleme islemi yapmak istiyorsunuz. Eclipse kurmaya mecbur degilsiniz. Tabii ki MinGW
Elimizde neler var;

  1. main.c

Bu dosyayi derlemek istiyoruz. Ne yapmaliyiz ?
Oncelikle Windows kullanicilari ARM derleyicileri ile birlikte gelen bir MinGW dagitimina sahip olmalilar.
[MinGW with ARM-GCC][1]

Daha sonra ise ayni path icerisinde derleme yapabilmek icin bir adet Makefile isminde uzantisiz bir dosya icerisine sunu yazip MinGW konsolunda

OUTPUT_DIR = ./output

#include ettigimiz dosyalar nerede bulunur icine koyacagimiz degisken
IPATH = .

#VPATH makefile icerisinde source dosyalarini arayacagi yeri soyler otomatiktir.
VPATH = .

SRCS += main.c

SRCS_O += main.o

#tum .o ile biten dosyalar output/<dosyaismi>.o ile degistirilir ki
#derleme ciktilari output a gitsin

#:= operatoru anlik atama operatorudur, duz esitleme recursive oldugu icin hata atar
SRCS_O := $(SRCS_O:%.o=$(OUTPUT_DIR)/%.o)

GCC := arm-none-eabi-gcc

# ':' gorulen her yer aslinda bir derleme recetesidir

create_output_dir:
	@mkdir -p ${OUTPUT_DIR}

${OUTPUT_DIR}/%.o: %.c
	printf "${GCC} -o --specs=nosys.specs ${@} ${<}\n\n"
	@${GCC} -o ${@} ${<} --specs=nosys.specs

#PHONY make ile disarida kullanilabilecek komut tanimlamasi yapmamiza yarar
.PHONY: all
all: create_output_dir $(SRCS_O)

.PHONY: clean
clean: 
	rm -rf $(OUTPUT_DIR)/*

"make all" diyebilirler.
Eger ciktilari silmek istiyorsaniz.
make clean ile silebilirsiniz. Dikkat edilmis bir makefile da -j opsiyonu vererek cok threadli derleme bile yapilabilir.
[1]: https://www.jann.cc/2013/10/10/embedded_development_with_open_source_tools_on_windows.html

...