2012-10-09 59 views
-1

我有一些unix源我想要在VS中工作。我猜,所有的#includes都被编码为一些用户定义的头文件路径。例如#include <myheader>,但myheader存在于..\headers\myheader.hpp之类的项目文件夹中。修复所有包含在子目录中的C++文件中的路径

是否有任何实用工具可以递归扫描所有C++文件并修复#include与这些子目录中找到的头文件?

例如,它会转换

#include <myheader> 

#include "..\headers\myheader.hpp" 

(否则我一定要扁平化层级,因为这是一个有点乱)

(有没有必要担心潜在的重复头......)

+1

为什么不直接添加到编译器的头文件路径? – x13n

+0

你真的不应该包含目录路径作为你的#includes的一部分 - 它会使代码库变得凌乱,脆弱并且难以维护。正确的解决方案是为编译器指定搜索路径,以帮助它找到所需的#includes。 –

+0

@ x13n因为这是难以编码的路径......没有理由这样做。代码编写者应该首先使用相对路径。 (另外,大约有50个Dirs,每个都需要包含在内......只是浪费在做这件事,而不是正确的方式) – AbstractDissonance

回答

5

我建议你添加您的headers目录改为项目选项中某处的包含路径。

+0

当所有需要完成的操作都是文件需要使用包含的相对路径时,我不打算包含50个路径。我想我必须制作我自己的实用程序 – AbstractDissonance

+0

您将标题分散在50个目录中吗?你应该考虑修改你的布局。这是更常见的(你甚至可以看到为什么)保持包含文件在一个目录和源(另一个或多个)。 –

+0

它可能并不清楚,但VS上的“unix”源代码我的意思是我下载的东西。 – AbstractDissonance

0

关于到标题的目录路径,我同意其他海报。

如果您需要在文件中递归地替换某个特定模式,那么您应该学习如何使用findsed(如果您使用的是Unixoid OS)。

你的情况的解决方案看起来像

find . -name \*.cpp -exec sed -i -e 's/old/new/g' {} \; 

我敢打赌,你将需要在某些时候使用这个在你的生活8 ^)

+0

尽管真的回答这个问题是一个好主意,但我认为'VS'不是一成不变的。当然,这里有一个cygwin,但是... –

+0

嗯,我很熟悉find,但从来没有听说过sed。我会查找它,但编写小型实用程序比使用这些简洁的命令行实用程序通常更容易,这些实用程序可能会在发生错误时轻易破坏文件。无论如何,我不知道如何使用find或sed来查找头文件的相对路径? (你必须为他们做一个搜索) – AbstractDissonance

相关问题