OS algılama makefile
Ben rutin birkaç farklı bilgisayarlar ve Mac OS X, Linux, Solaris birçok farklı işletim sistemleri üzerinde çalışır. Proje üzerinde çalışıyorum, uzaktan git deposundan kodumu çekin.
Benim projeler üzerinde çalışmak mümkün yanındayım ne olursa olsun. Şimdiye kadar, makefile bilgisayarlar geçiş her zaman değiştirerek OS değişiklikleri etrafında almak için iki yol buldum. Ancak, bu can sıkıcı ve baş ağrısı bir sürü neden olur.
Nasıl kullanıyorum bunu algılar ve buna göre sözdizimi değiştirir, böylece benim makefile değiştirebilir miyim?
Burada makefile:
cc = gcc -g
CC = g -g
yacc=$(YACC)
lex=$(FLEX)
all: assembler
assembler: y.tab.o lex.yy.o
$(CC) -o assembler y.tab.o lex.yy.o -ll -l y
assembler.o: assembler.c
$(cc) -o assembler.o assembler.c
y.tab.o: assem.y
$(yacc) -d assem.y
$(CC) -c y.tab.c
lex.yy.o: assem.l
$(lex) assem.l
$(cc) -c lex.yy.c
clean:
rm -f lex.yy.c y.tab.c y.tab.h assembler *.o *.tmp *.debug *.acts
CEVAP
Zaten çok güzel cevaplar var, ama her ikisi de) daha kapsamlı bir örnek paylaşmak istedim uname
Windows üzerinde var olduğunu varsayalım ve b yok) ayrıca işlemci algılar. Bu CCFLAGS burada tanımlanmış pek tavsiye veya ideal değil; sadece hangi otomatik algılama OS/CPU ekleme olduğum proje kullanmak için neler yapıyorlar.
ifeq ($(OS),Windows_NT)
CCFLAGS = -D WIN32
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
CCFLAGS = -D AMD64
endif
ifeq ($(PROCESSOR_ARCHITECTURE),x86)
CCFLAGS = -D IA32
endif
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
CCFLAGS = -D LINUX
endif
ifeq ($(UNAME_S),Darwin)
CCFLAGS = -D OSX
endif
UNAME_P := $(shell uname -p)
ifeq ($(UNAME_P),x86_64)
CCFLAGS = -D AMD64
endif
ifneq ($(filter �,$(UNAME_P)),)
CCFLAGS = -D IA32
endif
ifneq ($(filter arm%,$(UNAME_P)),)
CCFLAGS = -D ARM
endif
endif
Makefile bir değişken öğeyi kaldırmak?...
src olay algılama iFrame?...
Nasıl makefile döngü yazmak için?...
Makefile Eğer-O zaman Başka ve Döngüle...
raylar üzerinde ruby/ruby bellek sızın...