组织学校工作区/编写Makefile

时间:2009-10-19 00:17:17

标签: linux svn gcc makefile organization

我正在为学校做一些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中自动执行此操作。

感谢您提供环境设置的任何帮助或替代方案。

谢谢!

编辑:我忘了提到我搜索了Google并找到了一些描述自动依赖关系生成的页面(也许我想要这个?)使用gcc -MM我已阅读过GNU制作手册,但没有任何内容跳出来。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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