LINUX.ORG.RU

История изменений

Исправление slovazap, (текущая версия) :

А дефолтный мейкфайл я накидал бы примерно такой. Тут учтены основные ошибки, нет ничего лишнего и он работает как с GNU make так и с BSD вариантами (fmake, bmake).

# Всегда с ?=, чтобы можно было переопределить через окружение
CXX?=       g++

# Аналогично, всегда с ?= - здесь указываются флаги которыми
# можно настраивать сборку - например, оптимизации и дебаг. В
# общем случае они полностью задаются пользователем, вы 
# указываете умолчальные
CXXFLAGS?=  -O2 -g

# А здесь добавляются неопциональные флаги, которые нужны для
# проекта всегда (варнинги, стандарт)
CXXFLAGS+=  -Wall -Wextra -pedantic -Werror=return-type -std=c++11

# Если нужны сторонние библиотеки. Никаких захардкоженных
# явных путей (типа -I/usr/local/include) - они всегда
# системно-специфичны. Если для зависимости нет pkg-config, 
# лучше сразу возьмите CMake.
# Также не забываем += чтобы уважать заданное пользователем
# в окружении
CPPFLAGS+=  `pkg-config --cflags libcurl`
LDFLAGS+=   `pkg-config --libs libcurl`

# Установка
PREFIX?=    /usr/local
DESTDIR?=   # empty

# Собственно программа и исходники
PROG=       foo
SRCS=       main.c
OBJS=       ${SRCS:.c=.o}

# Цель по умолчанию
all: ${PROG}

${PROG}: ${OBJS}
    ${CXX} ${LDFLAGS} -o ${PROG} ${OBJS}

.cpp.o:
    ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<

install: ${PROG}
# не забываем DESTDIR!
    install -m 555 ${PROG} ${DESTDIR}${PREFIX}/bin

uninstall:
# пожалуйста, не надо. По той же причине по которой deinstall
# не поддерживается cmake'ом. В частности, нет никаких гарантий
# что вы запустите deinstall от той же ревизии проекта, из
# которой его поставили, и он удалится не целиком (в лучшем
# случае)

clean:
    rm -f *.o ${PROG}

# Если нужно вызвать дочерний make, всегда вызываем его
# через ${MAKE}
docs:
    cd ${DOCS} && ${MAKE}

Добавлю что для сохранения совместимости с GNU/BSD make почти ничего сверх перечисленного использовать нельзя (в частности, условия и циклы, модификаторы переменных и т.д.). Если нужно, опять таки лучше сразу взять CMake

Исправление slovazap, :

А дефолтный мейкфайл я накидал бы примерно такой. Тут учтены основные ошибки, нет ничего лишнего и он работает как с GNU make так и с BSD вариантами (fmake, bmake).

# Всегда с ?=, чтобы можно было переопределить через окружение
CXX?=       g++

# Аналогично, всегда с ?= - здесь указываются флаги которыми
# можно настраивать сборку - например, оптимизации и дебаг. В
# общем случае они полностью задаются пользователем, вы 
# указываете умолчальные
CXXFLAGS?=  -O2 -g

# А здесь добавляются неопциональные флаги, которые нужны для
# проекта всегда (варнинги, стандарт)
CXXFLAGS+=  -Wall -Wextra -pedantic -Werror=return-type -std=c++11

# Если нужны сторонние библиотеки. Никаких захардкоженных
# явных путей (типа -I/usr/local/include) - они всегда
# системно-специфичны. Если для зависимости нет pkg-config, 
# лучше сразу возьмите CMake.
# Также не забываем += чтобы уважать заданное пользователем
# в окружении
CPPFLAGS+=  `pkg-config --cflags libcurl`
LDFLAGS+=   `pkg-config --libs libcurl`

# Установка
PREFIX?=    /usr/local
DESTDIR?=   # empty

# Собственно программа и исходники
PROG=       foo
SRCS=       main.c
OBJS=       ${SRCS:.c=.o}

# Цель по умолчанию
all: ${PROG}

${PROG}: ${OBJS}
    ${CXX} ${LDFLAGS} -o ${PROG} ${OBJS}

.cpp.o:
    ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<

install: ${PROG}
# не забываем DESTDIR!
    install -m 555 ${PROG} ${DESTDIR}${PREFIX}/bin

clean:
    rm -f *.o ${PROG}

# Если нужно вызвать дочерний make, всегда вызываем его
# через make
docs:
    cd ${DOCS} && ${MAKE}

Добавлю что для сохранения совместимости с GNU/BSD make почти ничего сверх перечисленного использовать нельзя (в частности, условия и циклы, модификаторы переменных и т.д.). Если нужно, опять таки лучше сразу взять CMake

Исправление slovazap, :

А дефолтный мейкфайл я накидал бы примерно такой. Тут учтены основные ошибки, нет ничего лишнего и он работает как с GNU make так и с BSD вариантами (fmake, bmake).

# Всегда с ?=, чтобы можно было переопределить через окружение
CXX?=       g++

# Аналогично, всегда с ?= - здесь указываются флаги которыми
# можно настраивать сборку - например, оптимизации и дебаг. В
# общем случае они полностью задаются пользователем, вы 
# указываете умолчальные
CXXFLAGS?=  -O2 -g

# А здесь добавляются неопциональные флаги, которые нужны для
# проекта всегда (варнинги, стандарт)
CXXFLAGS+=  -Wall -Wextra -pedantic -Werror=return-type -std=c++11

# Если нужны сторонние библиотеки. Никаких захардкоженных
# явных путей (типа -I/usr/local/include) - они всегда
# системно-специфичны. Если для зависимости нет pkg-config, 
# лучше сразу возьмите CMake.
# Также не забываем += чтобы уважать заданное пользователем
# в окружении
CPPFLAGS+=  `pkg-config --cflags libcurl`
LDFLAGS+=   `pkg-config --libs libcurl`

# Установка
PREFIX?=    /usr/local
DESTDIR?=   # empty

# Собственно программа и исходники
PROG=       foo
SRCS=       main.c
OBJS=       ${SRCS:.c=.o}

# Цель по умолчанию
all: ${PROG}

${PROG}: ${OBJS}
    ${CXX} ${LDFLAGS} -o ${PROG} ${OBJS}

.cpp.o:
    ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<

install: ${PROG}
# не забываем DESTDIR!
    install -m 555 ${PROG} ${DESTDIR}${PREFIX}/bin

clean:
    rm -f *.o ${PROG}

# Если нужно вызвать дочерний make, всегда вызываем его
# через make
docs:
    cd ${DOCS} && ${MAKE}

Добавлю что для сохранения совместимости с GNU/BSD make почти ничего сверх перечисленного использовать нельзя (в частности, условия и циклы, модификаторы переменных и т.д.). Если нужно, опять таки лучше взять CMake

Исправление slovazap, :

А дефолтный мейкфайл я накидал бы примерно такой. Тут учтены основные ошибки, нет ничего лишнего и он работает как с GNU make так и с BSD вариантами (fmake, bmake).

# Всегда с ?=, чтобы можно было переопределить через окружение
CXX?=       g++

# Аналогично, всегда с ?= - здесь указываются флаги которыми
# можно настраивать сборку - например, оптимизации и дебаг. В
# общем случае они полностью задаются пользователем, вы 
# указываете умолчальные
CXXFLAGS?=  -O2 -g

# А здесь добавляются неопциональные флаги, которые нужны для
# проекта всегда (варнинги, стандарт)
CXXFLAGS+=  -Wall -Wextra -pedantic -Werror=return-type -std=c++11

# Если нужны сторонние библиотеки. Никаких захардкоженных
# явных путей (типа -I/usr/local/include) - они всегда
# системно-специфичны. Если для зависимости нет pkg-config, 
# лучше сразу возьмите CMake.
CPPFLAGS+=  `pkg-config --cflags libcurl`
LDFLAGS+=   `pkg-config --libs libcurl`

# Установка
PREFIX?=    /usr/local
DESTDIR?=   # empty

# Собственно программа и исходники
PROG=       foo
SRCS=       main.c
OBJS=       ${SRCS:.c=.o}

# Цель по умолчанию
all: ${PROG}

${PROG}: ${OBJS}
    ${CXX} ${LDFLAGS} -o ${PROG} ${OBJS}

.cpp.o:
    ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<

install: ${PROG}
# не забываем DESTDIR!
    install -m 555 ${PROG} ${DESTDIR}${PREFIX}/bin

clean:
    rm -f *.o ${PROG}

# Если нужно вызвать дочерний make, всегда вызываем его
# через make
docs:
    cd ${DOCS} && ${MAKE}

Исходная версия slovazap, :

А дефолтный мейкфайл я накидал бы примерно такой. Тут учтены основные ошибки, нет ничего лишнего и он работает как с GNU make так и с BSD вариантами (fmake, bmake).

# Всегда с ?=, чтобы можно было переопределить через окружение
CXX?=       g++

# Аналогично, всегда с ?= - здесь указываются флаги которыми можно настраивать сборку - например, оптимизации и дебаг. В общем случае они полностью задаются пользователем, вы указываете умолчание
CXXFLAGS?=  -O2 -g

# А здесь добавляются неопциональные флаги, которые нужны для проекта всегда (варнинги, стандарт)
CXXFLAGS+=  -Wall -Wextra -pedantic -Werror=return-type -std=c++11

# Если нужны сторонние библиотеки. Никаких захардкоженных явных путей (типа -I/usr/local/include) - они всегда системно-специфичны. Если для зависимости нет pkg-config, лучше сразу возьмите CMake.
CPPFLAGS+=  `pkg-config --cflags libcurl`
LDFLAGS+=   `pkg-config --libs libcurl`

# Установка
PREFIX?=    /usr/local
DESTDIR?=   # empty

# Собственно программа и исходники
PROG=       foo
SRCS=       main.c
OBJS=       ${SRCS:.c=.o}

# Цель по умолчанию
all: ${PROG}

${PROG}: ${OBJS}
    ${CXX} ${LDFLAGS} -o ${PROG} ${OBJS}

.cpp.o:
    ${CXX} ${CXXFLAGS} ${CPPFLAGS} -c -o $@ $<

install: ${PROG}
# не забываем DESTDIR!
    install -m 555 ${PROG} ${DESTDIR}${PREFIX}/bin

clean:
    rm -f *.o ${PROG}

# Если нужно вызвать дочерний make, всегда вызываем его через make
docs:
    cd ${DOCS} && ${MAKE}