Я нашел этот вопрос здесь, который делает именно то, что я хочу. Однако, будучи новичком в make-файлах, мне трудно понять, как реализовать второй ответ в моей текущей настройке.
У меня есть простой make-файл, для которого я хотел бы использовать разные компиляторы при компиляции для Linux или кросс-компиляции для Windows. Как представлено, файл ниже работает. Для Linux я просто набираю make
, а для Windows - make os=win
. В интересах изучения того, как make-файлы работают немного лучше, я хотел бы иметь возможность реализовать связанный ответ в текущем Make-файле, чтобы я мог сделать для окон просто набрав make win
или make cross
, как представлено в связанном вопросе. ,
Может ли кто-нибудь помочь мне понять, как структура, представленная в связанном ответе, может быть реализована в конкретном случае, который у меня здесь? Предположительно, есть более элегантный способ, чем иметь цели native:
и cross:
и реплицировать почти весь код в обоих.
Любые предложения по очистке Makefile в целом также приветствуются.
ifeq ($(os),win)
CC=x86_64-w64-mingw32-gcc
OUT=cusum.exe
else
CC=gcc
OUT=cusum
endif
CFLAGS=-D_GNU_SOURCE -O3 -Wall -Wextra -lm --static
DEPS=bessel.h detector.h io.h stepfit.h lmmin_int64.h utils.h
ODIR=obj
_OBJ=main.o bessel.o detector.o io.o lmmin_int64.o stepfit.o utils.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
LIBS=-lm
$(ODIR)/%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
$(OUT): $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
.PHONY: clean
clean:
rm -f $(OUT) $(ODIR)/*.o *~ core $(INCDIR)/*~