包括从Windows到Linux的标头路径更改 我正在移植一个从Windows到Linux的C++编写的应用程序。我的头文件路径有问题。Windows使用\,Linux使用/。我发现在每一个源文件和头文件中都要更改这一点很麻烦。有什么解决办法吗?
您使用的是什么版本的Windows?据我所知,从Windows XP开始,正斜杠实际上起着路径分隔符的作用。在#include指令中始终使用正斜杠。一些操作系统/编译器需要它,而Windows/Visual Studio足够聪明,可以正确处理它 由于您是从Windows代码开始的,我假设您有Visual Studio。使用“查找和替换”对话框并创建一个正则表达式,该正则表达式将为您进行替换。在所有文件上运行“查找并替换” 例如,使用如下内容:包括从Windows到Linux的标头路径更改 我正在移植一个从Windows到Linux的C++编写的应用程序。我的头文件路径有问题。Windows使用\,Linux使用/。我发现在每一个源文件和头文件中都要更改这一点很麻烦。有什么解决办法吗?,c++,header,include,backslash,C++,Header,Include,Backslash,您使用的是什么版本的Windows?据我所知,从Windows XP开始,正斜杠实际上起着路径分隔符的作用。在#include指令中始终使用正斜杠。一些操作系统/编译器需要它,而Windows/Visual Studio足够聪明,可以正确处理它 由于您是从Windows代码开始的,我假设您有Visual Studio。使用“查找和替换”对话框并创建一个正则表达式,该正则表达式将为您进行替换。在所有文件上运行“查找并替换” 例如,使用如下内容: #include:b+<{[^\\\>]
#include:b+<{[^\\\>]}\\
#包括:b+]\\
用于搜索表达式和
#include <\1
#include在#include路径中始终使用前斜杠。编译器的工作是将路径映射到底层操作系统支持的任何斜杠/目录方案。Windows API始终支持正斜杠作为目录分隔符。这是因为至少在DOS3.1以前,它也受到支持。问题一直是COMMAND.COM和CMD.EXE。它们使用正斜杠作为选项指示符(而不是Unix中的破折号)。在使用字符串中的反斜杠转义特殊字符的语言中,切勿对目录分隔符使用反斜杠
如果您缺少unixshell,您难道没有跨多个文件进行搜索/替换的编辑器吗?见鬼,如果有必要的话,写一个小程序来做。对其包含语句的C++源代码进行解析并不难。是的,您可以而且应该始终使用正斜杠。我认为问题在于如何从这里到达那里
如果安装了Perl,下面的一个内衬将转换C++源文件以使用前斜杠,将原始版本保存在文件中,扩展名<>代码> BAK < /C> >:
perl -i.bak -pe "tr!\\!/! if /^\s*#\s*include\b/" myfile.cpp
(上面的命令行适用于Windows;如果您使用的是Linux或其他类似Unix的shell,请在第3个参数周围使用单引号,而不是双引号。)
如果需要转换大量文件,请说出以.cpp
结尾的所有文件:
for %f in (*.cpp) do perl -i.bak -pe "tr!\\!/! if /^\s*#\s*include\b/" %f
Bourne shell环境(典型的Linux shell)的相应命令:
如果您没有安装Perl,您应该能够找到一个文本编辑器,允许跨文件进行搜索和替换。您可以在以前的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\b/'
我认为OP是从Windows到Linux,而不是从Linux到Windows实际上应用程序是为不同的平台编写的。我正在使用其他人编码的文件。我很想知道是否有一种更简单的方法可以将反斜杠改为正斜杠,或者得到类似的效果。当你最终解决这个问题时,请记住:永远不要使用反斜杠。正斜杠在Windows和Linux中都可以使用。您可能希望使用不同于的分隔符!如果你使用的是tcsh。@mrree:说得对。此外,您还需要稍微更改for循环的语法(不幸的是,我忘记了确切的语法)。它并不总是支持正斜杠,这是多年来的一个大问题。但是现在是这样。至少回到DOS 4.0它做到了。乔:绝对不是真的。编译器可能在include中支持它,而explorerui肯定支持它。但是WinAPI通常没有。我想你回答错问题了——这家伙已经有一堆带有反斜杠的include路径的文件了。他需要一辆救护车,而不是有人告诉他不该开这么快。问得好!我猜他的意思是,他希望避免在项目之间移动时不断地在/和\之间切换。(OP你能澄清一下吗?)。翻转文件中斜杠的方向是一条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\b/'