我正在使用 gnu make 和 gcc 进行编译。我在 linux (Ubuntu)
这是游戏黑杰克的图表,其中节点代表最终的目标文件。
  
我已经组织了每个类都在它自己的文件夹中的代码。
tree -d
.
└── classes
    ├── dealer
    │   └── hand
    ├── deck
    │   └── card
    │       ├── card_color
    │       ├── card_suit
    │       ├── card_value
    │       └── colorizer
    ├── discard_pile
    │   └── card
    ├── user
    │   └── hand
    │       └── card
    └── user_choice
为了使文件系统表现得像一个图,一些目录是符号链接。
没有重复的代码。
例如,如果实际卡片代码在目录卡组中,则 hand 和 discard_pile 文件夹在其中具有指向该目录的符号链接。
我遇到了多个定义错误,因为我的程序链接到所有子目录对象文件。
它将遵循符号链接并最终不止一次地收集一些目标文件。
我不能告诉它忽略符号链接的文件夹,因为有时需要遵循它们。例如:如果我要在庄家文件夹中制作一个驱动程序,则需要收集 hand、card、card_color、card_suit、card_value、colorizer 对象(即使 hand 文件夹是符号链接)。  
有没有办法继续收集重复的目标文件,但在链接之前告诉 gcc 或 make 忽略重复项?
因为它们是符号链接,所以路径名称不同。
此外,可能存在对象名称相同但实现不同的情况。
我不确定如何识别重复的目标文件确实是同一个文件,不应多次链接。
我不想通过询问有关如何管理大型和扩展项目(实体关系复杂)的建议来使这个问题过于笼统,但是如果您认为我的结构是荒谬或有问题的,请指出问题和其他方式你会去做的。我试图避免将所有源文件放在一个目录中,因为没有类图,关系将难以派生。