Все ли должно быть явно для makefile c ++? - PullRequest
2 голосов
/ 26 марта 2010

Я имею в виду, makefile выполняет поиск в каталогах по умолчанию, которые не указаны явно?

Ответы [ 2 ]

1 голос
/ 26 марта 2010

По умолчанию единственный каталог, который make ищет, является текущим. Вы можете изменить это с помощью функции view-path (если ваша версия make поддерживает ее - например, GNU Make поддерживает ее - ищите VPATH ), или написав более сложные правила, или используя имена с компонентами пути в них.

0 голосов
/ 26 марта 2010

Чтобы ответить на то, что кажется вашим вопросом ... make будет искать только в текущем каталоге (хотя вы можете вызвать make с опцией "-f", чтобы указать make-файл, который не называется "Makefile" или расположенный в другом каталоге, вы также можете вызвать make с опцией "-C" для запуска в другом каталоге, и вы можете включить один make-файл (возможно, расположенный в другом месте - из другого make-файла); однако, чтобы ответить на более общий вопрос о том, нужно ли явно указывать все в вашем make-файле ...

Не все в Makefile нужно указывать явно. У Make есть несколько встроенных правил, которые позволяют ему строить вещи автоматически. Например, $ (CXX), компилятор C ++ определен по умолчанию, и Make может создать файл, который заканчивается на «.o», из файла с тем же именем, которое заканчивается на «.cpp» автоматически. Так, например:

program_NAME := myprogram
program_SRCS := $(wildcard *.cpp)
program_OBJS := ${program_SRCS:.cpp=.o}

$(program_NAME) : $(program_OBJS)
     $(CXX) $(program_OBJS) -o $(program_NAME) $(CXXFLAGS) $(LDFLAGS)

Приведенного выше make-файла достаточно для сборки «myprogram», используя все файлы «.cpp» в текущем каталоге, и обратите внимание, что единственным явным шагом сборки является компоновка ... он использует правила автоматической сборки для компиляции.

Если вы хотите управлять различными флагами, вы можете добавить записи в CXXFLAGS и LDFLAGS, такие как:

CXXFLAGS += -I./include -DHAVE_UNISTD_H -Wall -pedantic
LDFLAGS += -L./thirdparty/libs -lm -lboost

Просто добавьте операторы перед правилами сборки. Тем не менее, я бы посоветовал вам взглянуть на систему сборки CMake , так как она намного проще, с большей вероятностью является переносной и труднее выстрелить себе в ногу. Несмотря на то, что можно создавать очень переносимые make-файлы, в Makefile также очень легко использовать элементы, зависящие от платформы и даже конфигурации, что делает CMake лучшим выбором системы сборки.

Если вы хотите узнать больше о CMake, вас может заинтересовать просмотр CMake Google Techtalk , чтение Почему KDE переключился на CMake , посещение CMake wiki и добавление в закладки CMake Manual . Вам также может быть интересно использовать шаблон проекта приложения C ++ и шаблон проекта библиотеки C ++ , оба из которых используют CMake и предоставляют вам простой для начала проект.

Если вы хотите узнать больше о Makefile, вас может заинтересовать мое руководство Как написать Makefile .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...