Как настроить Make-файл для сборки с использованием выходных каталогов в стиле Visual Studio? - PullRequest
0 голосов
/ 13 марта 2012

У меня есть базовый проект на основе makefile в Linux.Он также собирается в Visual Studio для Windows.

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

Как мне настроить проект Makefile для сборки исходного кода разными способами по разным путям?

Например, отладочная сборка будет выглядеть примерно так:

g++ -ggdb -Wall -DDEBUG
.o files in ./Debug/obj
.so and binary files in ./Debug/bin

И выходные данные выпуска будут:

g++ -Os -Wall
.o files in ./Release/obj
.so and binary files in ./Release/bin

Делать отладку или делать релиз могли бы их сделать, или сделать все было бы все.

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

Приветствуется указатель на соответствующие примеры и документы.

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Найдите время для чтения, зайдите на домашнюю страницу Пола Смита , которая поддерживает GNU Make, и прочитайте эти две статьи:

Тогда вы, вероятно, поймете, что не стоит создавать другие каталогичем текущая, потому что это означает идти против структуры Make.

Статьи также помогут вам организовать сборку, и она может просто соответствовать вашей конкретной ситуации.

0 голосов
/ 13 марта 2012

Один из способов заключается в том, чтобы ваш проект поддерживал механизм конфигурации (аналогичный сценарию ./configure в Autoconf), чтобы его можно было настроить в каталоге, отличном от исходного каталога.Затем вы можете настраивать и создавать его различными способами.

Другой способ - использовать инструмент lndir для создания символьных деревьев сборки.Это мгновенно добавит возможности мульти-сборки практически в любой проект.Идея состоит в том, что у вас есть зеркальное дерево каталогов, заполненное символическими ссылками на исходные файлы в исходном дереве.Система сборки для программы не является мудрой (если только она не делает такие идиотские вещи, как канонизация путей, удаление символических ссылок: сопровождающие системы сборки Lisp ASDF, обратите внимание!).Он получает доступ к файлам через символические ссылки, но удаляет объекты локально.Приятно, что исходный каталог может быть полностью нетронутым и даже только для чтения!И вы можете добиться большего успеха, чем make clean: просто сгенерируйте lndir сгенерированную ферму ссылок, чтобы перейти в совершенно нетронутое состояние.

Я использовал подобные приемы для создания дистрибутива Linux для нескольких архитектур (всепакеты: glibc, gcc, apache, вы называете это).

Все это построено из одной рабочей копии;те же самые распакованные источники.

Взлом этой поддержки в проекте был бы последним средством.Если вам нравится язык GNU Make, сделайте это.Прочтите справочное руководство по GNU Make от начала до конца два или три раза, и все готово ... Я знаю как, и я тоже так делал, но какой в ​​этом смысл.Для объяснения потребуется место и оно того не стоит.

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