从Makefile将变量导入C程序

时间:2009-06-22 07:51:33

标签: c makefile

我需要在现有的长C源代码中进行一些更改。有一个顶级的Makefile,它定义了各种编译器选项,比如链接器使用的库的目录位置。

类似的东西:

LD_OPTIONS = $(PATH_TO_MYLIB1) $(PATH_TO_MYLIB2)

现在,我正在考虑使用dlsym()dlopen()来使用这些库,而不是显式链接它们。为此,我需要库路径。

dlopen( path_to_lib , RTLD_NOW) ;

如何使用Makefile中的PATH_TO_LIB变量并在我的程序中使用它?我想过使用“echosystem()”之类的东西。但是,我希望有更好的解决方案。 : - )

3 个答案:

答案 0 :(得分:9)

在你的makefile中你可以写

CFLAGS += -DPATH_TO_LIB="somepath/somelib"

因此PATH_TO_LIB成为预处理器宏,您可以在源代码中使用

dlopen(PATH_TO_LIB, RTLD_NOW);

答案 1 :(得分:4)

如果你的路径是硬编码的话,我没有太多看到你改变的意义,但我离题了。你可以这样做:

在makefile中:

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

然后在你的源头:

dlopen(MYLIB_1, RTLD_NOW);

答案 2 :(得分:2)

也许这样的事情?

在您的代码中

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

,编译命令可能如下所示:

 cc -DPATH_TO_LIB=\"${PATH_TO_LIB}\"