我已经写了几个c文本处理函数,我已将它们放在文件中:string_functions.c和string_functions.h。
我在一个项目中使用这些功能,效果很好。现在我想在一个完全不同的项目中同时使用这些相同的功能。我在Debian中使用gcc。
是否有一种在同一时间在多个项目中使用相同c源代码的好方法。项目位于具有相同父目录的不同子目录中。
如何构建make文件来执行此操作?
或者我只是在两个项目中放置string_functions.c(h)的副本。这似乎会使维护源代码变得更加困难。
答案 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>