Простая утилита генерации makefile?
кто-нибудь знает инструмент, который генерирует makefile путем сканирования каталога для исходных файлов?
Это может быть наивный:
- нет необходимости обнаруживать внешние зависимости
- использовать настройки компилятора/компоновщика по умолчанию
6 ответов
вы можете написать Makefile
что делает это для вас:
SOURCES=$(shell find . -name "*.cpp")
OBJECTS=$(SOURCES:%.cpp=%.o)
TARGET=foo
.PHONY: all
all: $(TARGET)
$(TARGET): $(OBJECTS)
$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@
.PHONY: clean
clean:
rm -f $(TARGET) $(OBJECTS)
просто поместите это в корневой каталог исходной иерархии и запустите make
(вам понадобится GNU Make для этого, чтобы работать).
(обратите внимание, что я не бегло Makefile
ish поэтому, возможно, это можно сделать проще.)
CMake делает это, и он даже создает makefiles и проекты Visual Studio. http://www.cmake.org/
все, что вам нужно сделать, это создать CMakeLists.txt-файл, содержащий следующие строки:
file(GLOB sources *.h *.c *.cxx *.cpp *.hxx)
add_executable(Foo ${sources})
затем перейдите в чистый каталог и введите:
cmake /path/to/project/
это создаст файлы Makefile в этом чистом каталоге сборки.
Это то, что я бы использовал для простого проекта:
CC = $(CXX)
CXXFLAGS += -ansi -pedantic -W -Wall -Werror
CPPFLAGS += -I<Dir Where Boost Lives>
SOURCES = $(wildcard *.cpp)
OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES))
all: myApp
myApp: $(OBJECTS)
единственное ограничение заключается в том, что если вы создаете исполняемый файл myApp. Затем один из исходных файлов должен быть назван myApp.cpp (где я ставлю main).
есть очень старый скрипт под названием "makedepend", который использовал для создания очень простых файлов Makefile. С тех пор я переключился на cmake почти для всего.
вот статья wiki http://en.wikipedia.org/wiki/Makedepend, Обратите внимание на список альтернатив внизу, включая depcomp в automake и флаг-M в gcc.
EDIT: как кто-то указал мне в другом вопросе, gcc -MM *.cpp > Makefile
создает довольно приятный простой файл makefile. У вас только начало ваши CPPFLAGS и правило для построения всего двоичного файла... который примет форму:
CPPFLAGS=-Wall
LDFLAGS=-lm
all: binary_name
binary_name: foo.o bar.o baz.o biff.o
- нет необходимости обнаруживать внешние зависимости
- использовать настройки компилятора/компоновщика по умолчанию
зачем тогда скрипт? При условии, что все исходные файлы проекта *.cpp
и в текущей директории:
all: $(notdir $(CURDIR))
$(notdir $(CURDIR)): $(subst .cpp,.o,$(wildcard *.cpp))
$(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@
Makefile построит все исходные файлы с настройками компилятора/компоновщика по умолчанию в исполняемый файл с именем текущего каталога.
в противном случае я обычно рекомендую людей попробовать проектов SCons вместо того, чтобы делать, где это намного проще и интуитивно понятно. Добавлен бонус, что нет необходимости кодировать вручную clean
цели, проверка зависимостей источника / заголовка встроена, она изначально рекурсивна и поддерживает правильные библиотеки.
Как описано в связанном обсуждение, HWUT-это инструмент, который может генерировать довольно Makefiles, искать зависимости и включать файлы в каталоги, которые вы говорите. В windows необходимо установить MinGW и Ctags. Под Linux gcc и ctags, скорее всего, присутствуют. Это OpenSource и свободно использовать.
особенно, при генерации модульных тестов для некоторых уже существующих модулей некоторого большего проекта с плохой когезией, это feautures легко избавляет вас от часов или даже дней.