Простая утилита для создания make-файла?

Кто-нибудь знает об инструменте, который генерирует make-файл путем сканирования каталога на наличие исходных файлов?

Это может быть наивно:

  • нет необходимости обнаруживать внешние зависимости
  • использовать компилятор по умолчанию / linker settings
7
задан StackedCrooked 26 August 2010 в 15:32
поделиться

5 ответов

Вы можете написать 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, поэтому, возможно, это можно сделать проще.)

9
ответ дан 6 December 2019 в 07:04
поделиться

Существует очень старый скрипт makedepend, который использовался для создания очень простых make-файлов. С тех пор я перешел на cmake почти для всего.

Вот вики-статья http://en.wikipedia.org/wiki/Makedepend, обратите внимание на список альтернатив внизу, включая depcomp в automake и флаг -M в gcc.

РЕДАКТИРОВАТЬ: Как кто-то указал мне в другом вопросе, gcc -MM *.cpp > ​​Makefile создает довольно хороший простой make-файл. Вам нужно только добавить свои CPPFLAGS и правило для построения всего двоичного файла..., которое примет форму:

CPPFLAGS=-Wall
LDFLAGS=-lm
all: binary_name
binary_name: foo.o bar.o baz.o biff.o
3
ответ дан 6 December 2019 в 07:04
поделиться
  • нет необходимости обнаруживать внешние зависимости
  • использовать настройки компилятора/компоновщика по умолчанию

Зачем тогда скрипт? При условии, что все исходные файлы вашего проекта имеют формат *.cpp и в текущем каталоге:

all: $(notdir $(CURDIR))
$(notdir $(CURDIR)): $(subst .cpp,.o,$(wildcard *.cpp))
        $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@

Makefile соберет все исходные файлы с настройками компилятора/компоновщика по умолчанию в исполняемый файл, названный в честь имени текущего каталога.

В противном случае я обычно рекомендую людям попробовать SCons вместо make там, где это намного проще и интуитивно понятно. Добавлен бонус в том, что нет необходимости кодировать вручную чистые цели, встроена проверка зависимостей источника/заголовка, он изначально рекурсивен и поддерживает соответствующие библиотеки.

1
ответ дан 6 December 2019 в 07:04
поделиться

CMake делает это и даже создает make-файлы и проекты Visual Studio. http://www.cmake.org/

Все, что вам нужно сделать, это создать файл CMakeLists.txt, содержащий следующие строки:

file(GLOB sources *.h *.c *.cxx *.cpp *.hxx)
add_executable(Foo ${sources})

Затем перейдите в чистый каталог и введите:

cmake /path/to/project/

Это будет создайте make-файлы в этом чистом каталоге сборки.

7
ответ дан 6 December 2019 в 07:04
поделиться

Это то, что я бы использовал для простого проекта:

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).

5
ответ дан 6 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: