eddy_em: (Default)
eddy_em ([personal profile] eddy_em) wrote2022-03-01 09:53 am
Entry tags:

Симлинки вместо аргументов командной строки

Сел сейчас переделать утилитку, вычисляющую моменты восхода/захода Солнца (ну и заодно полудня). Она нужна для того, чтобы не писать вручную, во сколько времени автоматом закрыть телескоп при наблюдениях. Ну и решил, чтобы не плодить сущности, просто сделать симлинки 'sunrise' и 'sunset' на основную утилиту 'noon'.
Для этого основными целями делаем создание ссылок, а уже их ставим в зависимость от основной цели. Вот такой Makefile получился:
# run `make DEF=...` to add extra defines
PROGRAM = noon
LDFLAGS := -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,--discard-all
LDFLAGS += -lnova
SRCS := $(wildcard *.c)
DEFINES := $(DEF) -D_GNU_SOURCE -D_XOPEN_SOURCE=1111
CFLAGS += -O2 -Wno-trampolines -std=gnu99
CC = gcc

LINKS := sunrise sunset

all : $(LINKS)

$(LINKS) : $(PROGRAM)
        @echo "make links"
        ln -s $< $@ || true

$(PROGRAM): sun.c
        @echo -e "\t\tCC $<"
        $(CC) $(LDFLAGS) $(CFLAGS) $(DEFINES) -o $@ $<

А внутри просто проверяем, что собой представляет basename(argv[0]), выбирая соответствующие действия.