English 中文(简体)
包括从Windows到Linux的标题路径更改
原标题:
  • 时间:2009-02-21 17:28:50
  •  标签:

我正在将一个用C++编写的应用程序从Windows移植到Linux。我遇到了头文件路径的问题。Windows使用,而Linux使用/。我发现在每个源文件和头文件中都更改这个很麻烦。有没有什么解决办法?

最佳回答

在#include路径中始终使用正斜杠。编译器的工作是将路径映射到底层操作系统支持的任何斜杠/目录方案。

问题回答

你们啊!是的,你们总是可以使用正斜杠,而且应该这样做。我认为问题在于如何从这里到那里!

如果您已经安装了Perl,以下一行代码将把C ++源代码文件转换为使用正斜杠,并将原始版本保存在扩展名为 .bak 的文件中:

perl -i.bak -pe "tr!\!/! if /^s*#s*include/" myfile.cpp

上述命令行适用于Windows;如果您使用Linux或其他类Unix的shell,请在第三个参数周围使用单引号代替双引号。

如果你有一堆需要转换的文件,比如所有以.cpp结尾的文件:

for %f in (*.cpp) do perl -i.bak -pe "tr!\!/! if /^s*#s*include/" %f

对应的命令为 Bourne Shell 环境(典型的 Linux Shell):

for f in *.cpp; do perl -i.bak -pe  tr!\!/! if /^s*#s*include/  $f; done

如果您没有安装Perl,您应该能够找到一个允许在文件之间搜索和替换的文本编辑器。

Windows API始终支持正斜杠作为目录分隔符。这是因为至少在DOS 3.1时期就已经支持了。问题始终存在于COMMAND.COM和CMD.EXE。它们使用正斜杠作为选项指示符(而不是在Unix中找到的破折号)。在字符串中使用反斜杠转义特殊字符的语言中,永远不要使用反斜杠作为目录分隔符。

如果你缺少Unix shell,难道你没有一个可以在多个文件中进行搜索/替换的编辑器吗?天哪,如果必须的话,编写一个小程序来执行它。解析C ++源代码的#include语句不难。

在#include指示中始终使用正斜杠。 一些操作系统/编译器需要它,并且Windows / Visual Studio足够聪明,可以正确处理它。

由於您從 Windows 代碼開始,我假設您有 Visual Studio。使用尋找和替換對話框,創建一個常規表達式,將為您進行替換。在所有文件上運行尋找和替換。

例如,使用类似这样的东西:

#include:b+<{[^\>]}\

针对您的搜索表达式和

#include <1

对于替换表达式(警告:未经测试),在所有文件上运行,直到没有替换发生。然后将尖括号改为引号并重复。

你使用的是哪个Windows版本?据我所知,从Windows XP开始,斜线确实可以作为路径分隔符使用。

您可以尝试基于之前的 Perl 命令执行此命令,该命令可以递归地执行工作。

find .  -type f -name * | xargs grep  #include  | grep  \  |awk -F:  {print $1} |sort| uniq | xargs -n1 perl -i.bak -pe  tr!\!/! if /^s*#s*include/ 




相关问题
热门标签