我正在设计一个由两个二进制文件组成的Linux C项目:可执行文件和共享库。
我使用Eclipse-cdt具有以下项目结构:
Main Project Executable +-----folderA ------------- sourceA.c ------------- sourceA.h +-----folderB ------------- sourceB.c ------------- sourceB.h main.c Shared Library Project +-----folderB ------------- libcode.c ------------- libcode.h
libcode.c 中的共享库代码严格依赖于主项目中的 folderA 和 folderB 代码。
我如何组织项目以便没有重复的文件?
我到目前为止找到的最佳解决方案是在eclipse中使用链接资源:
Main Project Executable +-----folderA ------------- sourceA.c ------------- sourceA.h +-----folderB ------------- sourceB.c ------------- sourceB.h ------------- libcode.c ------------- libcode.h main.c Shared Library Project +-----folderA [linked] ------------- sourceA.c [linked] ------------- sourceA.h [linked] +-----folderB [linked] ------------- sourceB.c [linked] ------------- sourceB.h [linked] ------------- libcode.c [linked] ------------- libcode.h [linked]
请注意,我将100%的共享库代码移动到主项目中,并链接了共享库中所需的所有文件。 这样我就不需要任何"物理"共享库项目中的源文件,但我仍然认为这不是一个好主意,因为它可能会让其他开发人员感到惊讶(违反POLS原则)。
可以选择将所有公共代码移动到第三个项目中,并使两个项目依赖于它,但在我的情况下,它将导致一个大的代码重构,我想避免。
还有其他可能吗?解决方案B绝对是一种更好的做法吗?
答案 0 :(得分:0)
您可能应该将源folderA
和folderB
放入共享库中,因为它们显然包含核心功能。在您的可执行文件中,使用库的源代码执行某些操作,例如,在libcode
中调用各种函数以实现最终用户的某些目标。您需要将可执行文件链接到共享库。
Main Project Executable [links to shared library]
main.c [uses libcode to do stuff]
Shared Library Project
+-----folderA
------------- sourceA.c
------------- sourceA.h
+-----folderB
------------- sourceB.c
------------- sourceB.h
------------- libcode.c
------------- libcode.h