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
Android - temel jest algılama...
Ne amacı da budur .SAHTE bir makefile?...
2 boyutlu bir dizi tepe algılama...
PHP algılama istek tipi (GET, POST)KOY...
Makefile deÄŸiÅŸken atama...