代码之家  ›  专栏  ›  技术社区  ›  Nick Presta

组织学校工作区/编写makefile

  •  0
  • Nick Presta  · 技术社区  · 15 年前

    我正在为学校做一些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的制造手册,但没有什么能跳出来。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Kieron    15 年前

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

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

        2
  •  1
  •   timdev    15 年前

    为什么您不想(SVN)将必要的libs复制到您的项目中?实际上,您将创建一个lib分支,以在项目中使用。如果您最终发现了库代码中的一个bug,您可以在适当的地方修复它,并将其提交回(副本)。一旦完成打包,就可以将修复程序合并回库的主干位置。