繁体   English   中英

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

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

[简短版本]在经过单元测试的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

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

有两种解决方案。

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

就我个人而言,我更喜欢MMD解决方案,因为它也可以更好地解决有问题的头文件。 参见http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM