LINUX.ORG.RU

Выше дали ссылку.
Ещё можно так

#!/bin/bash
g++ -c $(mysql_config --cflags) f1.cpp f2.cpp f3.cpp
g++ f1.o f2.o f3.o -o rezult6

tn1
()
Ответ на: комментарий от mono

cmakelists будет короче и работать на всех платформах

Reset ★★★★★
()

У меня как-то так:

build.mk:

CXX = g++
CXXFLAGS = -O2 -ansi -pedantic -Wall -pipe
LD = $(CXX)
LDFLAGS = $(CXXFLAGS) -Wl,-O1
STRIP = strip

ifeq ($(BINDIR),)
    BINDIR = bin
endif
ifeq ($(OBJDIR),)
    OBJDIR = obj
endif
ifeq ($(DEPDIR),)
    DEPDIR = .deps
endif

OBJS = $(addprefix $(OBJDIR)/, $(notdir $(SOURCES:.cpp=.o)))
DEPS = $(addprefix $(DEPDIR)/, $(notdir $(SOURCES:.cpp=.d)))
CXXFLAGS += $(INCLUDEPATH:%=-I%) $(DEFINES:%=-D%)
LDFLAGS += $(LIBPATH:%=-L%) $(LIBS:%=-l%)
VPATH = $(sort $(dir $(SOURCES)))

.PHONY: all clean distclean prepare

all: prepare $(BINDIR)/$(TARGET)

clean:
	@rm -f $(OBJS) $(DEPS)

distclean:
	@rm -rf $(BINDIR) $(OBJDIR) $(DEPDIR)

prepare:
	@test -d $(BINDIR) || mkdir $(BINDIR)
	@test -d $(OBJDIR) || mkdir $(OBJDIR)
	@test -d $(DEPDIR) || mkdir $(DEPDIR)

$(BINDIR)/$(TARGET): $(OBJS)
	$(LD) $^ $(LDFLAGS) -o $@
	@$(STRIP) $@

$(OBJDIR)/%.o: %.cpp
	$(CXX) $(CXXFLAGS) -MMD -MF $(DEPDIR)/$(notdir $(@:.o=.d)) -c -o $@ $<

-include $(DEPS)

Makefile:

TARGET = test

INCLUDEPATH = 3rdparty/lib1/include \
    3rdparty/lib2/include

SOURCES = src/main.cpp

LIBPATH = 3rdparty/lib1/lib \
    3rdparty/lib2/lib

LIBS = lib1 \
    lib2

DEFINES = NDEBUG

include build.mk
mannaz
()
Ответ на: комментарий от k_andy

cmake

cmake удобен и сравнительно прост в работе, но мне он показался не настолько простым и интуитивно понятным при освоения. Это не та вещь, в которой можно глянуть один раз на пример и сразу сориентироваться - что к чему.

Думаю, что Makefile-неоссилятор будет ещё большим cmake-неоссилятором. Если конечно он не тролль и цели у него совершенно другие.

pathfinder ★★★★
()
Ответ на: комментарий от fuking-fuck

за ссылку спасибо , но я все равно не могу понять куда там втулить опцию $(mysql_config --cflags)

Может как-то так:

SOME=`pkg-config gtk+-2.0 --cflags`

all:
	g++ main.cpp ${SOME} -o my_cool_program

pathfinder ★★★★
()

Есть мнение, что написание Makefile ручками, autotools, cmake полное фуфло. Ровные пацаны используют scons.

dizza ★★★★★
()
Ответ на: комментарий от dizza

Хз че там ровные пацаны, но чиста риальные пацаны использует вижуал студию в вайне!

Jetty ★★★★★
()
Ответ на: комментарий от Raving_Zealot

Тем, что это не система сборки, а несколько классиков на питоне, которые позволяют на питоне же написать скрипт для сборки, причём едва ли это получится лучше чем на голом питоне. SCons не выполняет ничего, что должно выполнять система сборки - начиная с поиска библиотек, и заканчивая возможностью управлять аспектами процесса сборки извне (как минимум, задавать CC/CXX/CFLAGS/CXXFLAGS). Там даже окружение в вызываемые утилиты не передаётся.

Итого, scons скрипты - нагромождение низкоуровнего кода на убогом питоне, где руками приходится делать всё, от задания путей к библиотекам в зависимости от системы до разбора аргументов. Разобраться в этом невозможно даже учитывая хвалёную питоновскую читабельность, при том что разбираться приходится, ибо для того чтобы собрать это под системой, которой нет у автора, скрипт надо серьёзно патчить.

На cmake же это 5 строчек которые правильно работают на любых системах и гибко настраиваются через аргументы/окружение.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

и заканчивая возможностью управлять аспектами процесса сборки извне (как минимум, задавать CC/CXX/CFLAGS/CXXFLAGS)

Да ну?

env = Environment()
env.Replace(CC = 'my_cc_compiler')

env.ParseConfig('sdl-config --cflags')
env.ParseConfig('sdl-config --libs')

env.Append(CCFLAGS = ['-g', '-Wall'])
env.Append(LIBS = ['SDL_image', 'GL'])

И т.д.

Raving_Zealot ★★
()
Ответ на: комментарий от Raving_Zealot

Я не это имел в виду. Система сборки обязана давать возможность менять CC/CXX/CFLAGS/CXXFLAGS при своём вызове (configure, например, берёт из окружения, cmake из аргументов), SCons не делает ничего - надо явно прописывать всё это в скрипте. И environ явно указывать, и много чего ещё.

Кстати, на cmake ваш пример потребует на 2 строки меньше, причём нормального синтаксиса (а не месива разных скобок и кавычек и env в каждой строке), и найдёт SDL даже там, где sdl-config нет в путях, причём под любыми системами.

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.