Лучшие практики для связи с библиотеками X11 - PullRequest
2 голосов
/ 17 мая 2011

У меня есть приложение X11, которое я разработал на RedHat. Когда я перешел на CentOS, библиотеки X11 также переместились. От /usr/X11R6/lib64 до /usr/X11R6/lib (даже при том, что оба выполняли 64-битную версию), и я видел их в других системах Linux / Unix.

Я использовал флаги компиляции -I и -L для указания на каталоги lib X11 непосредственно в make-файле, но с тех пор понял, что это требует изменений в make-файле при переключении машин.

Мой вопрос, ради переносимости ... я должен продолжать использовать -I и -L в make-файле? И если да, есть ли способ автоматически определить местоположение? Или я должен просто положиться на пользователя, имеющего их в своей LD_LIBRARY_PATH?

1 Ответ

0 голосов
/ 19 мая 2011

Если вы полагаетесь на GNU make, вы можете сделать что-то вроде:

X11LIBS ?= $(word 1, $(dir $(wildcard /usr/X11R6/lib64/libX11.so.*)))
X11LIBS ?= $(word 1, $(dir $(wildcard /usr/X11R6/lib/libX11.so.*)))
X11LIBS ?= $(word 1, $(dir $(wildcard /usr/lib/libX11.so.*)))
# and so on for whatever paths you come across

LDFLAGS += -L$(X11LIBS) -R$(X11LIBS)

Это позволяет пользователю переопределить X11LIBS в командной строке (make X11LIBS=/usr/local/X11R6/lib) и попробовать несколько вариантовесли пользовательская опция не указана.

Вы даже можете прервать сборку, если путь не найден, например

 ifeq ($(X11LIBS),)
 $(error Could not find X11 library path, please specify in X11LIBS
 endif

Все это только вариант, если вы ограничены ограничением файла Makefile.Переносимость: не-GNU make очень вероятно не будет доволен этими макросами.

...