Импортировать переменную в C-программу из Makefile - PullRequest
2 голосов
/ 22 июня 2009

Мне необходимо внести некоторые изменения в существующий длинный исходный код C. Существует Makefile верхнего уровня, который определяет различные параметры компилятора, такие как расположение каталогов библиотек, используемых компоновщиком.

Что-то вроде:

LD_OPTIONS = $(PATH_TO_MYLIB1) $(PATH_TO_MYLIB2)

Теперь я подумываю об использовании dlsym() и dlopen() для использования этих библиотек вместо их явного связывания. Для этого мне нужен путь к библиотеке.

dlopen( path_to_lib , RTLD_NOW) ;

Как я могу использовать переменную PATH_TO_LIB из Makefile и использовать ее в моей программе? Я думал об использовании что-то вроде "echo с system()". Однако я ожидаю, что есть лучшие решения. : -)

Ответы [ 3 ]

9 голосов
/ 22 июня 2009

В вашем make-файле вы можете написать

CFLAGS += -DPATH_TO_LIB="somepath/somelib"

, поэтому PATH_TO_LIB становится макросом препроцессора, который вы можете использовать в своем источнике, например

dlopen(PATH_TO_LIB, RTLD_NOW);
4 голосов
/ 22 июня 2009

Я не очень вижу смысла в ваших изменениях, если ваши пути в любом случае жестко закодированы, но я отступаю. Вы могли бы сделать что-то вроде этого:

В make-файле:

CFLAGS = -DMYLIB_1=$(PATH_TO_MYLIB1) -DMYLIB_2=$(PATH_TO_MYLIB2)

Тогда в твоем соусе:

dlopen(MYLIB_1, RTLD_NOW);
2 голосов
/ 22 июня 2009

Что-то вроде этого возможно?

В вашем коде

#ifndef PATH_TO_LIB
#error Path to ImportantLib missing
#endif ...

и команда компиляции может выглядеть как:

 cc -DPATH_TO_LIB=\"${PATH_TO_LIB}\"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...