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]), выбирая соответствующие действия.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org