代码目录结构 - 库设计

时间:2016-12-22 10:46:30

标签: c data-structures refactoring shared-libraries

下面是代码结构,其中stackQueuetree文件夹代码依赖于list文件夹代码,

../Computing >ls
HashTable  list  Queue  recursion  stack  tree

list文件夹在tree/rootedTree文件夹中重复,不像推荐的方法包含相关的头文件,提到here

../Computing/tree/rootedTree >ls
lcrsImpl.c  list  main.c  multiWalkImpl.c  tree.h

hererootedTree文件夹的不完整代码。

为避免List文件夹的代码重复,如何维护代码结构?

1 个答案:

答案 0 :(得分:3)

您似乎具有以下结构:

whatever/
   list/
      ...
      list.h  
   ...
   queue/
      ... <- some files have an #include "list/list.h";
      list/ <- duplicate
   tree/
      rootedTree/
         ...
         list/ <- duplicate
         tree.h <- has an #include "list/list.h";
         test.c <- #include "tree.h"

在此代码中,首先转到要编译内容的文件夹,然后在文件夹中编译它们:

 you@somewhere:~/whatever/tree/rootedTree$ gcc -Wall -I. -g *.c -o test

#include语句的路径与从调用编译器的位置有关(只要包含-I.参数;谢谢,@ jean-françois-fabre)。所以你很可能有以下(非重复)结构:

whatever/
   list/
      ...
      list.h  
   ...
   queue/
      ... <- some files have an #include "list/list.h"; no list/ duplicate
   tree/
      rootedTree/
         ...
         tree.h <- has an #include "list/list.h"; no list/ duplicate
   testTree.c <- #includes "tree/rootedTree/tree.h" and others

来自无论文件夹,你可以写

you@somewhere:~/whatever$ gcc -Wall -I. -g */*.c testTree.c -o testTree

并获取可执行文件进行测试。由于直接调用编译器很无聊,特别是如果您只想编译实际进行更改的代码部分,通常使用某种项目定义文件(MakefileScons ,. ..)为你处理。

复制很糟糕,并且(几乎)始终有办法避免它。