代码之家  ›  专栏  ›  技术社区  ›  sud03r

从makefile将变量导入C程序

  •  2
  • sud03r  · 技术社区  · 15 年前

    我需要对现有的长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 回复  |  直到 15 年前
        1
  •  9
  •   qrdl    15 年前

    在你的makefile里你可以写

    CFLAGS += -DPATH_TO_LIB="somepath/somelib"
    

    所以 PATH_TO_LIB 成为预处理器宏,可以在源中使用,如

    dlopen(PATH_TO_LIB, RTLD_NOW);
    
        2
  •  4
  •   Jason Coco superfell    15 年前

    如果你的道路是硬编码的,我不太明白你改变的意义,但我离题了。你可以这样做:

    在生成文件中:

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

    然后在你的灵魂里:

    dlopen(MYLIB_1, RTLD_NOW);
    
        3
  •  2
  •   Nifle Hassan Syed    15 年前

    像这样的事?

    在您的代码中

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

    编译命令可能会 像:

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