在多个项目中使用一个c源代码文件

时间:2014-08-25 01:27:43

标签: c makefile

我已经写了几个c文本处理函数,我已将它们放在文件中:string_functions.c和string_functions.h。

我在一个项目中使用这些功能,效果很好。现在我想在一个完全不同的项目中同时使用这些相同的功能。我在Debian中使用gcc。

是否有一种在同一时间在多个项目中使用相同c源代码的好方法。项目位于具有相同父目录的不同子目录中。

如何构建make文件来执行此操作?

或者我只是在两个项目中放置string_functions.c(h)的副本。这似乎会使维护源代码变得更加困难。

2 个答案:

答案 0 :(得分:3)

最好的方法是将C文件(.h和.c)构建到共享库中。

有许多关于如何使用gcc进行此操作的教程;一个是at this link

构建共享库后,您可以将其链接到许多其他项目中。

简而言之,这些是步骤。

确保你的string_functions.c包含string_functions.h和build。当然。

然后编译位置独立(那是-fPIC的用途)

$gcc -Wall -fPIC -c string_functions.c

最后像这样构建你的共享库

$gcc -shared -o my_stringfunctions.so string_functions.o

要从其他程序链接到新的共享库,请确保无论目录是什么 你把它放在LD_LIBRARY_PATH中。

然后你可以用

之类的东西进行链接
$gcc  my_otherprogram.c -L/path/to/my/lib -lmy_stringfunctions

正如所指出的,应该在一些目录路径中放置共享库使用的包含文件(.h),并使用-I选项将位置添加到包含搜索路径:

$gcc  my_otherprogram.c -I/path/to/include/files -L/path/to/my/lib -lmy_stringfunctions

答案 1 :(得分:0)

如果您的目录看起来如此:

/parent
    /project1
        ...
        string_functions.h
        string_functions.c
    /project2
        ...
        string_functions.h
        string_functions.c

然后,您只需将其存储在公共位置,然后在构建代码时指向该位置。例如,这是在/opt/中为自定义安装的库执行此操作的标准方法。

因此,一个建议就是这样做你的目录结构:

/parent
    /include
        string_functions.h
        string_functions.c
    /project1
        ...
    /project2
        ...

在构建各自的项目时,在编译时包含该搜索路径(使用-I标志):

gcc mainfile.c -I/parent/include <other options>