我正在为学校做一些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制作手册,但没有任何内容跳出来。
答案 0 :(得分:3)
使用可以使用subversion的externals功能将libs树的动态副本链接为项目的子目录。
但最后,最好只使用一个副本(一个subversion副本,因此它实际上是库代码的一个分支),这样你就不必担心库的变化会影响现有的项目,并可以根据需要合并更改。
答案 1 :(得分:1)
为什么你不想(svn)将必要的lib复制到你的项目中?您基本上将创建lib的分支以在项目中使用。如果您最终发现库代码中的错误,您可以将其修复到位,然后将其提交(复制)。一旦结束,您可以将修复程序合并回库的主干位置。