Задать вопрос
Ответы пользователя по тегу GNU Make
  • Как создать исполняемый файл с помощью make?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Make старый инструмент и он рассмотрен со всех мыслимых углов.

    Вот самый простяцкий, топорный без всякой автоматизации Makefile:
    # Which do you want install the program
    INSTALLDIR=/usr/local/bin
    MANDIR=/usr/local/man
    HEADERS=extern.h vary.h
    TESTS=bsddate
    SRCS=date.c netdate.c vary.c
    OBJS=date.o netdate.o vary.o
    LIBS=-lbsd
    MAN=bsddate.1
    
    CC=gcc
    
    # Flags for Linux
    CFLAGS=-pipe -funsigned-char -ggdb -g3
    
    RMF = -/bin/rm -f
    
    all: $(TESTS)
    
    .c.o:
            $(CC) -c $(DEFS) $(CFLAGS) $<
    
    $(OBJS): $(HEADERS)
    
    install:
            strip $(TESTS)
            install -d -m 755 -o root -g root $(INSTALLDIR)
            install -d -m 755 -o root -g root $(MANDIR)/man1
            install -c -m 755 -o root -g root $(TESTS) $(INSTALLDIR)
            install -c -m 644 -o root -g root $(MAN) $(MANDIR)/man1
    
    clean:
            $(RMF) $(OBJS) $(TESTS) *~ *.core *.bak *.BAK
    
    bsddate: $(OBJS)
            $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)

    Этот файл соберет бинарь bsddate из трех файлов исходников date.c, netdate.c и vary.c и двух файлов заголовков extern.h и vary.h, используя библиотеку libbsd, при установке раскидает по каталогам. Берешь приведенный в ответе AlexVWill ман и разбираешь по нему этот пример (если не хватит тяму его просто поправить под себя).
    Ответ написан
    Комментировать
  • Как исправить "npm not found"?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Значит либо npm в пути отсутстсвует, либо там жестко путь прописан, а npm там нет.
    Ответ написан
    Комментировать
  • Как исправить данные ошибки при компиляции?

    CityCat4
    @CityCat4 Куратор тега C
    //COPY01 EXEC PGM=IEBGENER
    При линковке программы линкер не обнаружил среди указанных ему библиотек той, которая содержала бы перечисленные в ошибках функции, нужно подключить библиотеку

    (И, если это не преднамеренный стеб - переименовать учетку - как-то смешно выглядят элементарные вопросы от юзера с ником LinuxGod :ROFL: )
    Ответ написан
    Комментировать
  • Зачем нужны зависимости в make?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Чтобы в том случае, если к моменту выполнения make изменился main.c ИЛИ hello.c, каждый из них был бы заново откомпилирован. Если этого не сделать - есть риск, что исходник лежит более новый, а в бинарь будет включен более старый обьектный модуль.
    Ответ написан
    Комментировать
  • Почему ошибка "recipe for target 'XXX.o' failed" при компиляции?

    CityCat4
    @CityCat4 Куратор тега C
    //COPY01 EXEC PGM=IEBGENER
    Именно данное сообщение не означает ничего. Кроме того, что при выполнении компиляции файла(ов) исходного текста для мишени libbitcoin_server_a-checkpoints.о возникла ошибка. Какая - а фиг его знает, ищите в логах :)
    Ответ написан
    Комментировать
  • Как правильно сделать Makefile?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Тут два варианта.

    Либо в обработке мишени все выполнять "одной командой", либо написать еще несколько Makefile и разложить по каталогам. Крупные проекты обычно используют второй путь.

    Вот пример первого пути:
    dist: realclean
            (cd .. \
               && $(RM) -f $(DSTNAME) && $(LN) -s $(BINARY) $(DSTNAME) \
               && $(TAR) chyf $(DSTNAME).tar.bz2 $(DSTNAME) && cd $(DSTNAME))

    общий принцип - в одной команде записываются все действия. Это не сильно удобно.
    Ответ написан
    6 комментариев
  • Как добавить путь к инклудам в системные пути gcc?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Никак. Системные пути hardcoded. Изменить их можно только пересборкой самого gcc. Makefile для того и служит, чтобы прописать все необходимые пути и прочее. И именно поэтому поверх него накрутили столько всяческих вещей - pkgconfig, autotools, cmake - они все вроде как призваны облегчать работу программиста по формированию проекта, но на самом деле запросто способны его в хлам запутать, особенно cmake :)

    Если Вы задумались над переносимостью проекта - то Вам либо с autotools разбираться (хотя с ними придется разобраться в любом случае), либо с cmake.
    Ответ написан
    6 комментариев
  • Как добавить include и Lib в существующий makefile?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    include добавить в CFLAGS и CXXFLAGS, либы в LDLIBS
    Ответ написан