1

[短版] 我的单元测试 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.o 。有没有办法强制 g++ 提供完整路径,或者我是否需要将测试文件的名称更改为:

test/src/os/event_handler_test.cpp

我无法在网上或文档中找到任何内容。

4

1 回答 1

2

有两种解决方案。

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

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

于 2013-03-10T10:49:02.037 回答