История изменений
Исправление 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}