Makefile для программы на C, которая использует numpy расширения - PullRequest
6 голосов
/ 26 января 2012

Пожалуйста, какой самый простой / самый элегантный способ определения правильных путей для numy include, поскольку они присутствуют в целевой системе?А затем использовать его командой make?В настоящее время я использую

gcc ... -I / usr / include / python2.7 / -I / usr / lib / python2.7 / site-packages / numpy / core / include / numpy /

и я хотел бы, чтобы эти два включения автоматически выбирались в зависимости от системы, на которой выполняется сборка.

Похоже, что я могу получить второе включение следующим образом:

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

но я не уверен насчет первого, и даже если бы я был, я все равно не был бы уверен, как лучше всего использовать его из make-файла (простым / элегантным способом)

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

numpy.get_include() - самый простой / лучший способ получить включения. Если ваш модуль расширения C использует numpy, тогда в Extension вы должны использовать include_dirs=[numpy.get_include()]. Почему у numpy.get_include() нет документации, которую я не знаю.

Тогда вы можете сделать, как подсказывает user1056255, но чуть лучше ...

CFLAGS = $(shell python-config --includes) $(shell python -c "import numpy; print '-I' + numpy.get_include()")
0 голосов
/ 27 января 2012

Итак, после некоторого поиска в Google и экспериментов я пришел к следующему:

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

Не уверен, насколько он надежен, но, похоже, он работает на всех машинах.

Мне пришлось использовать $ (shell ...) для настройки make-переменных из вывода оболочки, так как метод, предложенный mux, не работал для меня

...