(make/g++)包含自动生成的依赖目标的完整路径?(或方法)

(make/g++) include full path of auto-generated dependency targets? (or workaround)

本文关键字:路径 方法 目标 包含 自动生成 make 依赖 g++      更新时间:2023-10-16

[短版]我不能有两个源文件具有相同的名称在我的单元测试c++项目,即使他们在不同的文件夹。g++和make相互之间脾气不好。(也许我很愚蠢)

(长版)我的make/g++/gtest设置遇到了问题。当g++自动生成依赖时,它会生成如下内容:

event_handler.o: src/os/event_handler.h src/os/event.h

但是我需要这样的东西(目标的完整路径):

src/os/event_handler.o: src/os/event_handler.h src/os/event.h

原因是当我有一个这样的文件:

src/os/event_handler.cpp // contains EventHandler class

我有一个这样的配套文件:

test/src/os/event_handler.cpp // contains EventHandlerTest unit test class

…所以它们的。o文件都显示为event_handler。在自动生成的依赖项列表中。是否有一种方法可以强制g++给出完整的路径,或者我是否需要将测试文件的名称更改为如下内容:

test/src/os/event_handler_test.cpp

我无法在网上或文档中找到任何东西。

有两种解决方案。

  1. 使用-MMD一步编译和创建依赖项,这将生成与目标文件对应的。d文件。
  2. 在生成先决条件时使用-MT或-MQ指定对象的路径。

我个人更喜欢MMD解决方案,因为它也倾向于更好地处理有bug的头文件。见http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html