Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包括从Windows到Linux的标头路径更改 我正在移植一个从Windows到Linux的C++编写的应用程序。我的头文件路径有问题。Windows使用\,Linux使用/。我发现在每一个源文件和头文件中都要更改这一点很麻烦。有什么解决办法吗?_C++_Header_Include_Backslash - Fatal编程技术网

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

包括从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+<{[^\\\>]

您使用的是什么版本的Windows?据我所知,从Windows XP开始,正斜杠实际上起着路径分隔符的作用。

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

由于您是从Windows代码开始的,我假设您有Visual Studio。使用“查找和替换”对话框并创建一个正则表达式,该正则表达式将为您进行替换。在所有文件上运行“查找并替换”

例如,使用如下内容:

#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/'