2011-11-14 27 views
5

Tôi có một dự án được viết chủ yếu bằng C++ bao gồm một vài kịch bản trợ giúp được viết bằng python. Đối với thời điểm này, các kịch bản chứa các biến thay thế bằng các autotools:autotools và python setup.py

#[email protected]@ 
# -*- coding: utf-8 -*- 
... 

try: 
    datapath = os.environ['DATA_PATH'] 
except KeyError: 
    datapath = '@[email protected]' 

Và đây là một trích Makefile.am:

BUILT_SOURCES = script.py 
nodist_python_PYTHON = script.py 
CLEANFILES = $(python_PYTHON) 
EXTRA_DIST = script.py.in 

do_subst = sed -e 's,[@]PYTHON[@],$(PYTHON),g'\ 
      -e 's,[@]pkgdatadir[@],$(pkgdatadir),g' 

script.py: script.py.in 
    $(do_subst) < $< > [email protected] 
chmod +x [email protected] 

Những kịch bản cũng đã một vài phụ thuộc mô-đun mà có lẽ sẽ tốt hơn được xử lý bởi tập lệnh setup.py.

Vì vậy, cách tốt nhất để kết hợp các công cụ tự động và các công cụ làm trăn là gì? Tôi có nên dựa hoàn toàn vào các autotools không? Nếu không, làm thế nào tôi có thể tích hợp việc khởi chạy của setup.py trong Makefile.am?

Trả lời

2

Tôi muốn sử dụng autoconf để thiết lập script.py thay vì 'make' như bạn đã hiển thị. Một cái gì đó như:

AC_CONFIG_FILES([script.py], [chmod +x script.py]) 

trước AC_OUTPUT trong cấu hình.ac nên làm điều đó.

+0

Điểm tốt, điều này sẽ tự động thay thế. Tuy nhiên, nó không thực sự giúp đỡ với các phụ thuộc python. – hpixel

+0

Tôi chỉ đọc trong tài liệu mà biến thư mục không được mở rộng hoàn toàn bởi AC_CONFIG_FILES, vì vậy điều này sẽ không hoạt động tốt với $ (pkgdatadir). – hpixel

+0

Tôi đã sai. Câu trả lời của tôi sẽ không hoạt động với pkgdatadir bởi vì nó được cài đặt lúc cài đặt. – ldav1s

Các vấn đề liên quan