2012-01-26 29 views
6

Xin vui lòng cách đơn giản nhất/thanh lịch nhất để xác định đường dẫn chính xác cho mục tiêu bao gồm khi chúng xuất hiện trên hệ thống đích? Và sau đó sử dụng nó bằng cách thực hiện lệnh? Hiện tại tôi đang sử dụngMakefile cho chương trình C sử dụng các phần mở rộng nhiều phần

gcc ... -I/usr/include/python2.7/-I/usr/lib/python2.7/trang web-gói/numpy/core/include/numpy/

và tôi muốn có hai tính năng này được chọn tự động dựa trên hệ thống mà bản dựng được hoàn thiện.

Nó có vẻ như tôi có thể lấy thứ hai bao gồm như sau:

python -c "import numpy; print numpy.__path__[0] + 'core/include/numpy/'" 

nhưng tôi không chắc chắn về cái đầu tiên và thậm chí nếu tôi là tôi vẫn không chắc chắn làm thế nào để sử dụng tốt nhất nó từ makefile (một cách dễ dàng/thanh lịch)

Trả lời

0

Vì vậy, sau khi một số googling và experimentig đây là những gì tôi đã đưa ra:

CFLAGS = $(shell python-config --includes) $(shell python -c "import numpy; print '-I' + numpy.__path__[0] + '/core/include/numpy/'") 

Không chắc thế nào đáng tin cậy đó là nhưng có vẻ như được làm việc trên tất cả các máy cho đến nay.

tôi đã phải sử dụng $ (vỏ ...) cho việc thiết lập làm biến từ sản lượng vỏ như phương pháp mà theo MUX đề nghị không làm việc cho tôi

3

numpy.get_include() là/Cách dễ nhất tốt nhất để có được bao gồm. Nếu mô-đun mở rộng C của bạn sử dụng gọn gàng thì trong Extension bạn phải sử dụng include_dirs=[numpy.get_include()]. Tại sao numpy.get_include() dường như không có bất kỳ tài liệu nào mà tôi không biết.

Sau đó, bạn có thể làm như user1056255 gợi ý nhưng chỉ là một chút tốt hơn ...

CFLAGS = $(shell python-config --includes) $(shell python -c "import numpy; print '-I' + numpy.get_include()") 
Các vấn đề liên quan