0

我正在为学校做一些 C 编程,我发现自己一遍又一遍地重用我创建的库(堆栈、用户输入、错误处理等)。

现在,我个人的 SVN 目录结构是这样的:

trunk/
|-- 2520
|   `-- assignments
|       |-- A2
|           |-- Makefile
|           |-- README
|           |-- calculator.c
|           |-- calculatorlib.c
|           `-- calculatorlib.h
`-- libs
    |-- misc
    |   |-- errorlib.c
    |   |-- errorlib.h
    |   |-- userinputlib.c
    |   `-- userinputlib.h
    `-- stacks
        |-- stacklib.c
        `-- stacklib.h

出于显而易见的原因,其中一些文件(userinputlib 和 errorlib)几乎在我从事的每个项目中都会用到。我希望能够将这些文件包含在项目的工作区 (2520/assignments/A2) 中,而不必复制文件,因为我不想管理文件的副本,也不想签入两个副本SVN 中的同一个文件。
我想在项目工作区中有库文件,这样我的 Makefile 就可以工作,而无需进行太多手动配置(或硬编码路径)。

起初,我考虑了符号链接(SVN 和 tar 支持),但鉴于我在另一个目录中的标题,我似乎无法编译我的作业。

我可以手动将每个标头编译为目标文件并进行最终链接,但我不确定如何在 Makefile 中自动执行此操作。

对于我如何设置环境的任何帮助或任何替代方法,我们将不胜感激。

谢谢!

编辑:我忘了提到我已经搜索了谷歌并找到了一些描述自动依赖生成的页面(也许我想要这个?),gcc -MM并且我已经阅读了 GNU Make 手册,但没有任何东西跳出来。

4

2 回答 2

3

使用可以使用 subversion 的外部功能将 libs 树的动态副本链接为项目的子目录。

但最后最好只使用一个副本(一个颠覆副本,因此它实际上是库代码的一个分支),这样您就不必担心对库的更改会影响现有项目,并且可以根据需要合并更改。

于 2009-10-19T00:41:56.807 回答
1

你为什么不想(svn)将必要的库复制到你的项目中?您实际上将创建您的 lib 的一个分支以在您的项目中使用。如果您最终在库代码中发现错误,您可以将其修复到位,然后将其提交回(到副本)。完成后,您可以将修复合并回库的主干位置。

于 2009-10-19T00:26:48.510 回答