Скрипт компиляции - PullRequest
       2

Скрипт компиляции

0 голосов
/ 01 января 2012

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

Это для Linux, и я ищу что-то, что отличается от Makefile.

У Makefile есть некоторые проблемы:
Это долго писать, и это многословно менять, пока я создаю новые файлы;C / C ++ использует заголовочные файлы.
Makefile не перекомпилирует файл .c, если он содержит файл .h, который включает другой файл .h, который был изменен.Он нуждается в сложном синтаксисе.
Makefile использует символ табуляции, это не очень хорошо, потому что я использую клавишу табуляции для отступа (вместо него вставляются 4 пробела).

Например, мой оригинальный сценарий компиляции:

gcc file1.c -c -flags1
gcc file2.c -c -flags2
gcc file3.c file4.c -c -flags3
gcc file1.o file2.o file3.o file4.o -o a.out

И я хочу избежать перекомпиляции того, что не нужно, простыми способами.

Ответы [ 4 ]

3 голосов
/ 01 января 2012

ОБНОВЛЕНИЕ : Учебное пособие по созданию, упомянутое в этом посте, больше не существует, что является ужасным позором, поскольку это было действительно хорошее введение.

Make-файлы могут быть бесшовными, вы можете получить их автоматическискомпилируйте ваш проект, основываясь исключительно на файлах в каталогах проекта.Смотрите это Make Tutorial .После этого урока вы научитесь создавать динамические сценарии Makefile, которые компилируют только то, что было изменено, и следуют дереву зависимостей.

Но если вы хотите увидеть дальнейшее волшебство, взгляните на DevKitPro make-файлы, они дошли до того, что выяснили зависимости заголовка тоже, используя то, что я могу только предположить, использовать grep .Не стесняйтесь изменять его для своих собственных проектов.

2 голосов
/ 01 января 2012

Вы также можете использовать другой компоновщик, например, система сборки omake или система приготовления П.Мильера и т. Д. Я думаю, что omake очень мощная.Недостатком использования других сборщиков является то, что make обычно доступен в каждой системе Linux, но это не относится к omake (или cmake или cook).

Не забудьтечто make зависимости могут быть сгенерированы gcc с несколькими опциями препроцессора как -M и т. д. На практике вы можете использовать трюки GNU make, чтобы избежать написания сложных Makefile -s.

Хорошие редакторы, такие как, например, emacs , предоставляют вам специальные режимы для помощи в редактировании (и выделении) Makefile -s.

Вы можете использовать (даже внутри Makefile -s или сomake или другой компоновщик) кэш компилятора ccache (и его можно использовать «прозрачно», обозначив его как gcc).

Вы можете распространять свою компиляцию на другие машины нав локальной сети, например, distcc или icecream .Конечно, многие сборщики допускают параллельные компиляции (например, make -j).

Существует несколько генераторов Makefile, в частности, GNU autotools suite и cmake

Не забудьте использовать систему контроля версий (например, GIT) для ваших исходных кодов.

1 голос
/ 01 января 2012

Некоторые проекты (Doom3, MongoDB и другие) используют SCons .

Он написан на Python и имеет много функций (например, параллельная компиляция).

0 голосов
/ 07 января 2012

Я нашел более простой способ использовать makefile, и он работает.Там нет табуляции.С помощью touch я могу принудительно включить зависимую от заголовка компиляцию.

myexe.out: file1.o file2.o;\
g++ file1.o file2.o -o myexe.out

file1.o: file1.cpp;\
g++ -c file1.cpp -flags1

file2.o: file2.cpp header1.hpp;\
g++ -c file2.cpp -flags2

header1.hpp: header2.hpp;\
touch header1.hpp

Я попробую SCons.
Спасибо всем.

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