2009-07-11 4 views
2

Как я могу сделать Makefile, потому что это лучший способ, когда вы распространяете программу по исходному коду. Помните, что это для программы на C++, и я начинаю в мире разработки C. Но возможно ли сделать Makefile для моих программ Python?Создание Makefile

+4

Подождите ... Вы хотите сделать make-файл для своих приложений * Python *? Зачем? –

+0

Да, но я хочу и для моего проекта C. Python MakeFile - это только идея. Благодарю. –

+0

Вы нас обманываете? Секунды неуместны Вопрос через час http://stackoverflow.com/questions/1114658/download-file-using-c –

ответ

11

С вашего вопроса это звучит как учебное пособие или обзор того, что на самом деле делают Makefiles.

Хорошие места для начала - это документация GNU Make.

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

И его первые три главы охватывает:

  1. Обзор сделать
  2. Введение в Makefiles
  3. Пишущие Makefiles
+0

Спасибо, это очень хорошая база. –

6

Я использую Makefiles для некоторых проектов Python, но это весьма сомнительно ... Я такие вещи, как:

SITE_ROOT=/var/www/apache/... 

site_dist: 
    cp -a assets/css build/$(SITE_ROOT)/css 
    cp -a src/public/*.py build/$(SITE_ROOT) 

и так далее. Makefile - это не что иное, как системы пакетного исполнения (и довольно сложные). Вы можете использовать обычные инструменты Python (для генерации .pyc и других) так же, как и GCC.

PY_COMPILE_TOOL=pycompiler 

all: myfile.pyc 
    cp myfile.pyc /usr/share/python/...wherever 
myfile.pyc: <deps> 
    $(PY_COMPILE_TOOL) myfile.py 

Тогда

$ make all 

И так далее. Просто относитесь к своим операциям, как к любому другому. Ваш pycompiler может быть что-то простое, как:

#!/usr/bin/python 
import py_compile 
py_compile.compile(file_var) 

или некоторые вариации

$ python -mcompileall . 

Это все равно. Makefiles - это не что-то особенное, просто автоматическое исполнение и возможность проверки необходимости обновления файлов.

+0

Спасибо за Python часть помощи! –

+0

Это совершенно законное использование Make-файлов, я не думаю, что это сомнительно вообще. –

+0

@dF Попробуйте сказать, что для моих правил Makefile, которые удаляют и перезагружают таблицы SQL на промежуточном сервере: P –

4

Простой Makefile обычно состоит из множества целей, его зависимостей, и действия, выполняемые каждой цели:

all: output.out 

output.out: dependency.o dependency2.o 
    ld -o output.out dependency.o dependency2.o 

dependency.o: dependency.c 
    gcc -o dependency.o dependency.c 

dependency2.o: dependency2.c 
    gcc -o dependency2.o dependency2.c 

мишень all (который является первым в данном примере) и пытается построить его если они не существуют или не обновлены. будет выполняться, если в команде make не указан целевой аргумент.

+2

... потому что это первое, а не потому, что оно называется «все», правильно? – Stephan202

+0

@ Stephan202: Конечно. Это был просто пример. Но, наверное, я должен был упомянуть об этом, чтобы уменьшить вероятность путаницы. –

+0

Также полезно использовать правило .PHONY! –

4

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

Это не так. Например, KDE использует CMake, а Wesnoth использует SCons. Я бы предложил одну из этих систем, они легче и мощнее, чем делают. CMake может генерировать make-файлы.:-)

+0

Спасибо большое! –

+1

Не используйте SCons, если у вас есть какая-либо забота о скорости по мере роста вашего проекта: если вы хотите создать систему на основе Python, взгляните на Waf. – jkp

3

Для программ на языке Python, они, как правило, распространяются с setup.py скриптом, который использует distutils для того, чтобы построить программного обеспечения. distutils имеет обширный documentation, который должен быть хорошей отправной точкой.

Смежные вопросы